public class Solution {
public boolean match(char[] str, char[] pattern)
{
if(str==null||pattern==null)return false;
int s=0,p=0;
return matchP(str,pattern,s,p);
//看模式第二个是否是*
}
public boolean matchP(char[] str, char[] pattern, int s, int p){
if(p==pattern.length)
return s==str.length;//如果模式串到结尾,看是否匹配串到结尾了
if(p+1<pattern.length && pattern[p+1]=='*'){
if(s!=str.length &&(pattern[p]==str[s]||pattern[p]=='.'))//容易犯错的是,如果单独把s!=str.length拿到外层循环,会报错。
return matchP(str,pattern,s+1,p)||//匹配多个
matchP(str,pattern,s,p+2)||//匹配零个
matchP(str,pattern,s+1,p+2);//匹配1个
else//str遍历结束或者不相等
return matchP(str,pattern,s,p+2);
}
//如果后面不是*,或者pattern遍历到最后一个了
if(s!=str.length && (str[s]==pattern[p]||pattern[p]=='.'))
return matchP(str,pattern,s+1,p+1);
return false;
}
}