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