正则表达式匹配

正则表达式匹配

http://www.nowcoder.com/questionTerminal/28970c15befb4ff3a264189087b99ad4

参考剑指offer

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param pattern string字符串 
     * @return bool布尔型
     */
    bool matchCore(string str, string pattern){
        if(str[0] == '\0' && pattern[0] == '\0')
            return true;
        if(str[0] != '\0' && pattern[0] == '\0')
            return false;
        if(pattern[1] == '*'){
            if(pattern[0] == str[0] || (pattern[0] == '.' && str[0] != '\0')){
                return matchCore(str.substr(1), pattern.substr(2)) || /* *前面字符出现1次*/
                    matchCore(str.substr(1), pattern) || /* *前面字符出现2次*/
                    matchCore(str, pattern.substr(2));/* *前面字符出现0次*/
            }
            else{
                return matchCore(str, pattern.substr(2));
            }
        }
        if(pattern[0] == str[0] || (pattern[0] == '.' && str[0] != '\0'))
            return matchCore(str.substr(1), pattern.substr(1));
        return false;
    }

    bool match(string str, string pattern) {
        // write code here
        if(str.length() == 0 && pattern.length() == 0){
            return true;
        }
        return matchCore(str, pattern);
    }
};
全部评论
为什么string类还在使用C风格的'\0'结尾的字符串作为判断条件呢。
2 回复 分享
发布于 2021-03-19 22:06
还是用动态规划好,这种方法在leecode上会超时,"aaaaaaaaaaaaab" "a*a*a*a*a*a*a*a*a*a*c" 有局限性
1 回复 分享
发布于 2021-06-27 11:26
这种答案中 * 号只需要匹配0次和多次 并不需要匹配一次 即18行的递归是不需要的
1 回复 分享
发布于 2021-05-30 23:54
if(str.length() == 0 && pattern.length() == 0){ return true; } 这部分代码和matchCore里面判断模式串和匹配串都为空重复了,可以删去
点赞 回复 分享
发布于 2021-06-17 10:57

相关推荐

评论
8
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务