描述
请实现支持'?'and'*'.的通配符模式匹配
'?' 可以匹配任何单个字符。
'*' 可以匹配任何字符序列(包括空序列)
题解:利用双指针进行标记,如果s.charAt(i)==p.charAt(j)||p.charAt(j)=='?'则j++,i++;否则如果p.charAt(j)=='*',则对jstart,istart进行标记;否则如果jstart>-1 i=++istart;j=jstart+1;否则如果不匹配;最后还需判断两条字符串是否都已经遍历完成,如果p字符串最后还有非‘*’字符,则匹配不成功。
public class Solution {
public boolean isMatch(String s, String p) {
int len1=s.length();
int len2=p.length();
int i=0,j=0,istart=-1,jstart=-1;
while(i<len1)
{
if(j<len2&& (s.charAt(i)==p.charAt(j)||p.charAt(j)=='?'))
{
j++;
i++;
}
else if(j<len2&&p.charAt(j)=='*')
{
istart=i;
jstart=j;
j++;
}
else if(jstart>-1)
{
i=++istart;
j=jstart+1;
}
else{
return false;
}
}
while(j<len2)
{
if(p.charAt(j)!='*') return false;
j++;
}
return true;
}
}