正则表达式匹配

题目

代码

public class Solution {
    public boolean match(char[] str, char[] pattern){
        if(str==null||pattern==null){
            return false;
        }
        return mathcCore(str,pattern,0,0);
    }
    public boolean mathcCore(char[] str, char[] pattern,int index1,int index2){
        if(index1==str.length&&index2==pattern.length){
            return true;
        }
        if((index1<str.length&&index2>=pattern.length)){
            return false;
        }
        if((index2+1<pattern.length)&&pattern[index2+1]=='*'){
            if((index1<str.length&&pattern[index2]==str[index1])||(pattern[index2]=='.'&&index1<str.length)){
                return mathcCore(str,pattern,index1+1,index2+2)//*表示前一个字符出现一次
                        ||mathcCore(str,pattern,index1+1,index2)//*表示前一个字符可以出现多次
                        ||mathcCore(str,pattern,index1,index2+2);//*表示前一个字符出现0次
            }else {
                return mathcCore(str,pattern,index1,index2+2);//当前字符与模式字符不匹配,*表示模式字符出现0次
            }
        }
         if((index1<str.length&&str[index1]==pattern[index2])||(pattern[index2]=='.'&&index1<str.length)){
            return mathcCore(str,pattern,index1+1,index2+1);
        }
        return false;
    }
}
posted @ 2018-04-01 16:36  baixiaoshuai  阅读(145)  评论(0编辑  收藏  举报