非常绕的一道题。
题目大意:比较两组字符串是否相等,其中“?”可以替代一个字符,而“*”可以替代一串数量任意的连续字符
解题思路:
分为两个步骤,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();
}
本文介绍了一种复杂的字符串匹配算法,该算法能够通过特殊符号“?”和“*”进行灵活匹配。“?”可以替换任意单个字符,“*”则能替换任意长度的字符序列。文章详细解释了实现这一功能的具体步骤,并提供了完整的代码示例。
788

被折叠的 条评论
为什么被折叠?



