剑指Offer原书题解的C++版本

正则表达式匹配

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

class Solution {
    bool matchCore(const string& str,const string& pattern){
        if(str.empty()&&pattern.empty())
            return true;
        if(!str.empty()&&pattern.empty())
            return false;
        if(pattern[1]=='*'){
            if(pattern[0]==str[0]||(pattern[0]=='.'&&!str.empty()))
                                //进入下一状态
                return matchCore(str.substr(1),pattern.substr(2))
                                //留在当前状态
                                ||matchCore(str.substr(1), pattern)
                                //忽略一个'*'
                                ||matchCore(str, pattern.substr(2));
            else
                                //忽略一个'*'
                return matchCore(str, pattern.substr(2));
        }
        if(str[0]==pattern[0]||(pattern[0]=='.'&&!str.empty()))
            return matchCore(str.substr(1), pattern.substr(1));
        
        return false;
    }
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param pattern string字符串 
     * @return bool布尔型
     */
    bool match(string str, string pattern) {
        // write code here
        return matchCore(str,pattern);
    }
};
全部评论
递归深度大,使用内存多,力扣上部分测试用例会超时,如:"aaaaaaaaaaaaab""a*a*a*a*a*a*a*a*a*a*c"。
2 回复 分享
发布于 2021-08-24 09:34
中间的几个或导致递归次数太多超时
点赞 回复 分享
发布于 2023-02-21 11:38 江苏
这个可以在递归的时候维护一个map,表示 map[strIndex_patternIndex]如果遍历过了就需要再次重复遍历可以避免超时
点赞 回复 分享
发布于 2024-01-20 21:02 浙江

相关推荐

01-29 16:08
已编辑
华南农业大学 Java
点赞 评论 收藏
分享
评论
6
1
分享

创作者周榜

更多
牛客网
牛客企业服务