题目描述
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
public class Solution {
public boolean match(char[] str, char[] pattern)
{
return realMatch(str,0,pattern,0);
}
public boolean realMatch(char[] str, int strindex, char[] pattern, int patternindex){
if(strindex==str.length&&patternindex==pattern.length){
return true;
}
if(strindex==str.length&&patternindex!=pattern.length){
while(patternindex!=pattern.length){
if(pattern[patternindex]!='*'&&(patternindex+1>=pattern.length||pattern[patternindex+1]!='*')){
return false;
}
patternindex++;
}
return true;
}
//这边用后边约束 aaa a*
if(strindex!=str.length&&patternindex==pattern.length){
return false;
}
//aaa a*
//aaa a*a
if(str[strindex]==pattern[patternindex]){
if(patternindex+1<pattern.length&&pattern[patternindex+1]=='*'){
//if(strindex+1<str.length&&str[strindex+1]==str[strindex]){
return realMatch(str,strindex+1,pattern,patternindex)||realMatch(str,strindex,pattern,patternindex+2);
//}
//return realMatch(str,strindex+1,pattern,patternindex+2);
}
return realMatch(str,strindex+1,pattern,patternindex+1);
}
else {
if(pattern[patternindex]=='.'&&patternindex+1==pattern.length){
return realMatch(str,strindex+1,pattern,patternindex+1);
}
else if(pattern[patternindex]=='.'&&(patternindex+1)<pattern.length&&pattern[patternindex+1]!='*'){
return realMatch(str,strindex+1,pattern,patternindex+1);
}
else if(pattern[patternindex]=='.'&&(patternindex+1)<pattern.length&&pattern[patternindex+1]=='*'){
return realMatch(str,strindex,pattern,patternindex+2)||realMatch(str,strindex+1,pattern,patternindex);
}
else{
if((++patternindex)<pattern.length&&pattern[patternindex]=='*'){
return realMatch(str,strindex,pattern,patternindex+1);
}
else{
return false;
}
}
}
}
}
===================================================================================
可以用简化下步骤