// 题目描述
// 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,
// 而'*'表示它前面的字符可以出现任意次(包含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;
}