牛客(52)正则表达式匹配
// 题目描述 // 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符, // 而'*'表示它前面的字符可以出现任意次(包含0次)。 // 在本题中,匹配是指字符串的所有字符匹配整个模式。 // 例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 public static boolean match(char[] str, char[] pattern) { if(str == null || pattern == null){ return false; } return matchCode(str,0,pattern,0); } public static boolean matchCode(char[] str, int strIndex, char[] pattern, int patternIndex) { //匹配结束 if (strIndex==str.length&&patternIndex==pattern.length){ return true; } //匹配失败 if (strIndex!=str.length&&patternIndex==pattern.length){ return false; } //当第二个是*时 if (patternIndex<pattern.length-1 && pattern[patternIndex+1]=='*'){ //当前字符可以匹配 if (strIndex != str.length&&(str[strIndex]==pattern[patternIndex]||pattern[patternIndex]=='.')){ return matchCode(str,strIndex+1, pattern,patternIndex)||//当前匹配 matchCode(str,strIndex+1, pattern,patternIndex+2)||//匹配一次结束 matchCode(str,strIndex, pattern,patternIndex+2);//匹配零次结束 }else{ return matchCode(str,strIndex, pattern,patternIndex+2); } } // 当第二个不是* if (strIndex != str.length&&(str[strIndex]==pattern[patternIndex]||pattern[patternIndex]=='.')){ return matchCode(str,strIndex+1, pattern,patternIndex+1); } return false; }