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