Implement wildcard pattern matching with support for ‘?’ and ‘*’.
‘?’ Matches any single character.
‘*’ Matches any sequence of characters (including the empty sequence).
The matching should cover the entire input string (not partial).
The function prototype should be:
bool isMatch(const char *s, const char *p)
Some examples:
isMatch("aa","a") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "*") → true
isMatch("aa", "a*") → true
isMatch("ab", "?*") → true
isMatch("aab", "c*a*b") → false
这道题的坑在于出现*
后源串可能有多个可以进行后续匹配的地方,这时候就需要回朔回 *
的地方从下个可以匹配的点开始匹配
abc |d|def|a|defb
abc |*|defb
简单的回朔代码
bool isMatch(char* s, char* p) {
char *temps=NULL,*tempp=NULL;
while(*s)
{
if(*p=='?'||*s==*p) {s++;p++;continue;}
if(*p=='*'){tempp = p++;temps =s;continue;}
if(tempp){p = tempp+1;s=++temps;continue;}
return false;
}
while(*p=='*') p++;
return !*p;
}