面试题十九:正则表达式匹配

 

请实现一个函数用来匹配包含‘ .’ 和‘ * ' 的正则表达式。模式中的字符 ‘ .’ 代表任意一个字符,而‘' *' 表示它前面字符可以出现无数次(包含0)

关键在于*的匹配·有多种可能

static boolean isMatch(String s, String p) {
        //存在某一为空
        if(s==null||p==null) return false;
        //开始匹配
        return f1(s,0,p,0);
    }

   static boolean f1(String s,int s1,String p,int  p1) {
        //到达尾部,匹配完成
        if(s.length()==s1&&p.length()==p1) return true;
        //不匹配
        if(s.length()!=s1&&p.length()==p1) return false;

        //判断下一个字符是不是  *
        if((p1+1< p.length()) && p.charAt(p1+1)=='*') {

            //下一个字符是*,当前字符匹配
            if(p.charAt(p1)==s.charAt(s1)||
                    (p.charAt(p1)=='.'&&s1!=s.length()))
            {
                return  f1(s,s1+1,p,p1+2)    // * 字符匹配1个,双方进入下一个
                        ||f1(s,s1+1,p,p1)        //*字符匹配多个,*的指针不变
                        ||f1(s,s1,p,p1+2);      // * 字符匹配0个

            }
            //当前字符不匹配, * 字符匹配0个
            else return f1(s,s1,p,p1+2);
        }

        //当前匹配
        if(p.charAt(p1)==s.charAt(s1)||(p.charAt(p1)=='.'&&s1!=s.length()))
            return  f1(s,s1+1,p,p1+1);
        //当前不匹配
        return false;
    }

 

posted @ 2020-03-29 14:38  浪波激泥  阅读(411)  评论(0编辑  收藏  举报