'?' 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", "?*") → trueisMatch("aab", "c*a*b") → false
题目的意思是通配符匹配,即从从开始比较,两个字符串是否匹配。
public static boolean isMatch(String s, String p) {
int i = 0,j = 0,starIndex = -1,iIndex = -1;
while(i<s.length()){
//字符相等或p的字符为‘?’
if(j<p.length()&&(p.charAt(j)=='?'||p.charAt(j)==s.charAt(i))){
++i;
++j;
}//p的字符为‘*’,记录此时的i,j,i不做变化,j++
else if(j < p.length() && p.charAt(j) == '*') {
starIndex = j;
iIndex = i;
j++;
}//如果之前p的字符中存在‘*’,i变化,重置j为starIndex+1,即‘*’后的字符位置
else if (starIndex != -1) {
j = starIndex + 1;
i = iIndex+1;
iIndex++;
}else
return false;
}
//处理s为空,p不为空的情况
while(j < p.length() && p.charAt(j) == '*')
++j;
return j == p.length();
}