该题主要考正则表达式,需要迭代的去匹配,自然想到用递归,先考虑结束标志位某一串结束或者某一个字符不匹配的情况。针对未结束的中间情况,主要考虑下一位是*与下一位不是*两种情况分别处理,若是*,就需要依次考虑目前字符有0-n个的情况,然后实际处理s+(0,n)与p+2是否匹配。代码如下:
class Solution {
public:
bool isMatch(const char *s, const char *p) {
//cout<<strlen(s)<<" "<<strlen(p)<<endl;
if(p[0]=='\0'){
if(s[0]==p[0])
return true;
else return false;}
if(p[1]!='*'){
if(p[0]==s[0]||(p[0]=='.'&&s[0]))
return isMatch(s+1,p+1);
return false;}
if(p[1]=='*'){
while(s[0]==p[0]||(p[0]=='.'&&s[0])){
if(isMatch(s,p+2))return true;
s++;
}
if(isMatch(s,p+2))return true;
return false;
}
}
};