面试题十九:正则表达式匹配
请实现一个函数用来匹配包含‘ .’ 和‘ * ' 的正则表达式。模式中的字符 ‘ .’ 代表任意一个字符,而‘' *' 表示它前面字符可以出现无数次(包含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; }
浪波激泥