您的位置:首页 > 其它

Leetcode--RegularExpressionMatching

2015-06-08 19:40 281 查看
可以把问题简化成如下的递归形式

d[i][j]表示String s[0...i]与Pattern p[0...j]是否匹配

case1:p[j+1]!='*', 比较s[i]与p[j]。if(s[i]==p[j])d[i][j]=d[i-1][j-1] else return false。如果p[j]==‘.’,那么作相等处理

case2:p[j+1]=='*',依次调用d[i][j-1],d[i-1][j-2]...d
[j-2]直到没有可以匹配的s[i]。如果在此期间匹配则返回true,不然调用d[n-1][j-2]

public boolean isMatch(String s, String p) {
return ismatch(s,s.length()-1,p,p.length()-1);
}
public boolean ismatch(String s,int sindex,String p,int pindex){
if(sindex>=0&&pindex<0)return false;
if(sindex<0&&pindex<0)return true;
if(sindex<0)return isNull2(p,pindex);
if(sindex>=0){
if(p.charAt(pindex)=='*')return ismatch(s,sindex,p,pindex-1);
else if(pindex==p.length()-1){
if(s.charAt(sindex)==p.charAt(pindex)||p.charAt(pindex)=='.')return ismatch(s,sindex-1,p,pindex-1);
else return false;
}
if(p.charAt(pindex+1)!='*'){
if(s.charAt(sindex)==p.charAt(pindex)||p.charAt(pindex)=='.')return ismatch(s,sindex-1,p,pindex-1);
else return false;
}else{
while(s.charAt(sindex)==p.charAt(pindex)||p.charAt(pindex)=='.'){
if(ismatch(s,sindex,p,pindex-1))return true;
sindex--;
if(sindex<0)break;
}
}
}
if(sindex>=0)return ismatch(s,sindex,p,pindex-1);
if(sindex<0&&isNull(p, pindex))return true;
if(sindex<0&&pindex>=0)return false;
return false;
}
public boolean isNull(String p,int pindex){
if(p.charAt(pindex)=='*') pindex--;
while(p.charAt(pindex+1)=='*'){
if(pindex==0)return true;
pindex=pindex-2;
}
return false;
}
public boolean isNull2(String p,int pindex){
pindex--;
while(p.charAt(pindex+1)=='*'){
if(pindex==0)return true;
pindex=pindex-2;
}
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 正则匹配