主要难点在于当第二个char为'*'时,先判断原字符组存在并且相等或者匹配字符为'.‘,
public class Solution {
public boolean match(char[] str, char[] pattern)
{
if(pattern==null)
return str==null;
return match(str,0,pattern,0);
}
public boolean match(char[] str,int sStart,char[] pattern,int pStart){
if(pattern.length-pStart==0)
return str.length-sStart==0;
if(pattern.length-pStart==1){
return str.length-sStart==1&&(pattern[pStart]=='.'||pattern[pStart]==str[sStart]);
}
if(pattern[pStart+1]!='*'){
return str.length-sStart>0&&(str[sStart]==pattern[pStart]||pattern[pStart]=='.')
&&match(str,sStart+1,pattern,pStart+1);
}
else{
while(str.length-sStart>0&&(str[sStart]==pattern[pStart]||pattern[pStart]=='.')){
if(match(str,sStart,pattern,pStart+2)) return true;//使后面的匹配上,返回true
sStart++;
}
}
return match(str,sStart,pattern,pStart+2);
}
}
注意有下面几种情况
"ab",".*" true