正则表达式匹配

正则表达式匹配

http://www.nowcoder.com/questionTerminal/45327ae22b7b413ea21df13ee7d6429c

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;
    }
}
全部评论

相关推荐

牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务