请实现一个函数用来匹配包含‘.’和‘’的正则表达式。模式中的字符'.'表示任意一个字符,而‘’表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。
思路:思路为从左到右遍历,假设模式串为pattern,模式串为str,分三种情况
- 当为普通字符时,判断str[i]和pattern[i]是否相等,如果不相等,则返回fase,如果相等str[i+1],pattern[i+1]
- 当为‘.’时,继续往下走,str[i+1],pattern[i+1]。
- 当'i+1'为‘*’时候,比较复杂,可以是{str[i+1],pattern]},{str[i+1],pattern[i+2]},{str[i],pattern[i+2]}
- 测试集,含有‘.’,'*'的字符串,空字符串,
public class MatchREG {
public boolean match(String pattern,String str){
if(str==null||pattern==null) return false;
char[] patternChar = pattern.toCharArray();
char[] strChar = pattern.toCharArray();
return matchCore(patternChar,strChar,0,0);
}
public boolean matchCore(char[] pattern,char[] str,int pIndex,int sIndex){
if(pIndex==str.length-1&&sIndex==str.length-1)
return true;
if(pIndex>=pattern.length-1) return false;
if(sIndex>=str.length-1) return false;
if(pIndex+1=='*'){
if(str[pIndex]==pattern[sIndex])
return matchCore(pattern,str,pIndex,sIndex+1)||matchCore(pattern,str,pIndex+2,sIndex+1)||matchCore(pattern,str,pIndex+2,sIndex);
else return matchCore(pattern,str,pIndex+2,sIndex);
}
if(str[sIndex]==pattern[pIndex]||pattern[pIndex]=='.')
return matchCore(pattern,str,pIndex+1,sIndex+1);
return false;
}
}
网友评论