Leetcode 之Regular Expression Matching(31)
正则表达式的匹配,还是挺难的。可根据下一个字符是不是*分为两种情况处理,需要考虑多种情况。
bool isMatch(const char *s, const char *p) { if (*p == '\0')return *s == '\0'; //如果下一个不是*(*可表示前一个字符的数量) //要么当前字符匹配,要么是.,不可跳过 if (*(p + 1) != '*') { if (*s == *p || (*p == '.' && *s != '\0')) return isMatch(s + 1, p + 1); else return false; } else { //如果是*,则当前字符匹配|| 有一个为. //因为后面是*,即使不完全匹配也没关系,跳过即可 while (*p == *s || (*p == '.' && *s != '\0')) { if (isMatch(s, p + 2)) return true; s++; } return isMatch(s, p + 2); } }