LeetCode之Regular Expression Matching

来源:互联网 发布:淘宝靠谱的宠物店 编辑:程序博客网 时间:2024/06/05 18:04
/*这道题最关键的是理解题意。最重要的是:当一个字母后面跟着字符'*',表示这个字符重复0次,1次,...,n次。所以在判断字符串是否匹配时,需要看接下来p的字符是否为'*'字符。分两种情况处理*///方法一:递归法class Solution {public:    bool isMatch(string s, string p) {        if(p.empty()) return s.empty();        return is_match(s, p, 0, 0);    }        bool is_match(const string &s, const string &p, int idx_s, int idx_p){        if(idx_p == p.size()) return idx_s == s.size();        if(idx_p + 1 == p.size()) return idx_s+1 == s.size() && (p[idx_p] == s[idx_s] || p[idx_p] == '.');        if(p[idx_p+1] != '*'){            if(p[idx_p] == s[idx_s] || (p[idx_p] == '.' && idx_s < s.size())){                return is_match(s, p, idx_s+1, idx_p+1);            }            else return false;        }        while(p[idx_p] == s[idx_s] || (p[idx_p] == '.' && idx_s < s.size())){            if(is_match(s, p, idx_s, idx_p+2)) return true;            ++idx_s;        }        return is_match(s, p, idx_s, idx_p+2);    }};

0 0
原创粉丝点击