非常绕的一道题。
题目大意:比较两组字符串是否相等,其中“?”可以替代一个字符,而“*”可以替代一串数量任意的连续字符
解题思路:
分为两个步骤,s字符串与可能出现的p多出的字符串
步骤1分为4种情况:
1.一一对应或者有“?”
2.出现“*”
3.在“*”出现后没有对应
4.没出现“*”还没有对应
public boolean isMatch(String s, String p) {
int x = 0;
int y = 0;
int starInx = -1;
int match = 0;
//检验s字符串范围内的元素
while(x<s.length()){
//情况1:字符一一对应和“?”对应字符
if(y<p.length() && (s.charAt(x)==p.charAt(y) || p.charAt(y)=='?')){
x++;
y++;
}
//出现“*”,将x压入match中(以此停止技术一轮),代表*所在字符串的y继续计数
else if(y<p.length() && p.charAt(y)=='*'){
starInx = y;
match = x;
y++;
}
//在“*”出现后没有继续匹配(触发“*”特效)的情况
else if(starInx!=-1){
match++;
y = starInx+1;
x = match;
}
else return false;
}
//考虑第一个字符串使用完之后第二个字符串有富余的情况
while(y<p.length() && p.charAt(y)=='*'){
y++;
}
return y==p.length();
}