'?' 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
Recursion not passing OJ:
public boolean isMatch(String s, String p) {
if (p.length() == 0) {
return s.length() == 0;
}
if (s.length() == 0) {
if (p.charAt(0) == '*') {
return isMatch(s, p.substring(1));
} else {
return false;
}
}
if (p.charAt(0) == '*') {
for (int i = 0; i <= s.length(); i++) {
if (isMatch(s.substring(i), p.substring(1))) {
return true;
}
}
} else {
if ((s.charAt(0) == p.charAt(0) || p.charAt(0) == '?')) {
if (isMatch(s.substring(1), p.substring(1))) {
return true;
}
}
}
return false;
}
Passing OJ:
http://blog.csdn.net/perfect8886/article/details/22689147
public boolean isMatch(String s, String p) {
int i = 0;
int j = 0;
int star = -1;
int mark = -1;
while (i < s.length()) {
if (j < p.length()
&& (p.charAt(j) == '?' || p.charAt(j) == s.charAt(i))) {
++i;
++j;
} else if (j < p.length() && p.charAt(j) == '*') {
star = j++;
mark = i;
} else if (star != -1) {
j = star + 1;
i = ++mark;
} else {
return false;
}
}
while (j < p.length() && p.charAt(j) == '*') {
++j;
}
return j == p.length();
}