bool isMatch(const char *s, const char *p) {
const char *backtrack_s = NULL;
const char *backtrack_p = NULL;
while (*s) {
//match
if (*p == '?' || *s == *p) {
++s;
++p;
}
//don't match.
else {
//meet *
if (*p == '*') {
//skip multiply *.
while (*p == '*')
++p;
if (*p == '\0')
return true;
//record the next position of *.
backtrack_s = s;
backtrack_p = p;
}
//
else {//注意:判断前面是否出现了*
if (backtrack_p) {
//注意:在当前位置往后判断出现不相等的时候,再重新回到下一个位置重新往后比较
//其意义是继续扩大*的作用范围。
s = ++backtrack_s;
p = backtrack_p;//恢复p的位置
}
//既不匹配,前面又没有*,这就是真的不匹配了。
else return false;
}
}
} //end while
while (*p == '*')//处理p末端的*
++p;
return (*s == '\0' && *p == '\0');
} 【leetcode】Wildcard Matching,布布扣,bubuko.com
原文地址:http://blog.csdn.net/shiquxinkong/article/details/28104547