您的位置:首页 > 其它

[Leetcode] Wildcard Matching

2015-08-13 23:34 357 查看
*匹配任意多个字符,.匹配单个字符

关键在于*的情况,如果遇到了星号,那么需要枚举所有与星号匹配的情况,包括空串的情况

一、递归解法

boolean isMRecursive(String s,String p){
if(p.compareTo("")==0) return s.compareTo("")==0;//如果匹配串为空,那么s也应该为空;
    if(s.compareTo("")==0){
      //如果s为空,那么匹配串应该是*
      for(int i=0;i<p.length();i++){
        if(p.charAt(i)!='*')
          return false;
      }
      return true;
    }

if(p.charAt(0)=='*'){
for(int i=0;i<s.length();i++){
if(isM(s.substring(i),p)) return true;
}
return false;
}else{
if(p.charAt(0)=='.'||(p.charAt(0)==s.charAt(0))){
return isM(s.substring(1),p.substring(1));
}else{
return false;
}
}
}


二、非递归解法

boolean isMIterate(String s,String p){
if(s.compareTo("")==0) return p.compareTo("")==0;
int i=0,j=0;
int start=-1;
int ss=0;
while(i<s.length()&&j<p.length()){
if(i==s.length()) return j==p.length();
if(p.charAt(j)=='*'){
start=j;
ss=i+1;
i++;
}else if(p.charAt(j)=='.'||p.charAt(j)==s.charAt(i)){
i++;
j++;
}else if(start!=-1){
i=ss;
j=start+1;
}else{
return false;
}
}
   if(i<s.length) return false;//如果模式串为空,但是匹配串还有剩余,应该返回false
   if(j<p.length()){//如果模式串有剩余,那么剩余的部分应该趋势*
    for(;j<p.length();j++){
      if(p.charAt(j)!='*') return false;
    }
   }
   return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: