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
递归超时法,抄来的,还需要好好理解:
public boolean isMatch(String s, String p) {
return helper(s, p, 0, 0);
}
boolean helper(String s, String p, int pos1, int pos2) {
if (pos2 == p.length()) {
return pos1 == s.length();
}
if (p.charAt(pos2) == '*') {
while (pos2 < p.length() && p.charAt(pos2) == '*') {
pos2++;
}
if (pos2 == p.length()) {
return true;
}
while (pos1 < s.length() && !helper(s, p, pos1, pos2)) {
pos1++;
}
return pos1 != s.length();
} else if (pos2 == p.length() || pos1 == s.length()) {
} else if (s.charAt(pos1) == p.charAt(pos2) || p.charAt(pos2) == '?') {
return helper(s, p, pos1 + 1, pos2 + 1);
}
return false;
}