/**************************************************************************************************************************************************************************
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
***************************************************************************************************************************************************************************/
思路:
1,主要是针对 *p=='*' 情况下的处理,当 p 每次遇到 '*' 的时候都往后跳过,同时记住 s 此时的位置。
2,记录 p 在 '*'之后的第一个元素,将 s 往后移动,找到此时的 *s==*p 进行递归。注意:*p=='?' 和 *s 的任何元素匹配。
/*******************************************************************
代码:
class Solution{
public:
bool isMatch(string s, string p){
return isMatch(s.c_str(), p.c_str());
}
private:
bool isMatch(const char *s, const char *p){
if (*p == '\0') return *s == '\0';
if (*p == '*'){
while (*p == '*') ++p;
if (*p == '\0')
return true;
while (*s != *p){
if (*s == '\0') return false;
else
++s;
}
isMatch(s, p);
}
else if (*p == '?' || *p == *s)
isMatch(s + 1, p + 1);
else
return false;
}
};