知识点/数据结构:字符串
题目描述
请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。
思路
开始看《Java编程思想》
正则表达式,详细看Java基础部分的正则表达式部分,以后一定要用!不用全记住,但是起码熟悉,用的时候一查就可以用。
public class Solution {
public boolean match(char[] str, char[] pattern)
{
return matchTwo(str,0,str.length,pattern,0,pattern.length);
}
private boolean matchTwo(char[] str, int i, int length1, char[] pattern,int j, int length2) {
if(i==length1&&j==length2) {
return true;
}
if(i==length1&&j!=length2) {
while(j!=length2){
if(pattern[j]!='*'&&(j+1>=length2||pattern[j+1]!='*')){
return false;
}
j++;
}
return true;
}
if(i!=length1&&j==length2) {
return false;
}
if(j+1==length2){
if(str[i]==pattern[j]||pattern[j]=='.')
return matchTwo(str, i+1, length1, pattern, j+1, length2);
else {
return false;
}
}
if((str[i]==pattern[j]||pattern[j]=='.')&&pattern[j+1]!='*')
return matchTwo(str, i+1, length1, pattern, j+1, length2);
if((str[i]==pattern[j]||pattern[j]=='.')&&pattern[j+1]=='*')
return matchTwo(str, i, length1, pattern, j+2, length2)||matchTwo(str, i+1, length1, pattern, j, length2);
if(pattern[j+1]=='*')
return matchTwo(str, i, length1, pattern, j+2, length2);
return false;
}
}