这道题做了N久,主要是边界条件太麻烦了,老是有小问题,最后看了下别人的代码才改对。
用递归:例如 aaaa和ab*a*a,不知道中间那个a*要吃掉多少个a,所以只能把所有的可能都尝试一遍。
要判断正则表达式p=0;p=1; p>1&&p[1]=='*';p>1&&p[1]!='*'这四种情况。
public class Solution {
public boolean isMatch(String s, String p) {int m,n;
m=s.length();
n=p.length();
char[] sc=new char[m];
char[] pc=new char[n];
sc=s.toCharArray();
pc=p.toCharArray();
int i=0;
if(n==0)
return m==0;
if(n==1)
return (m==1&&(sc[0]==pc[0]||pc[0]=='.'));
if (pc[1] != '*')
{
if( m>0 && (sc[0]==pc[0] || (pc[0] == '.')))
return isMatch(s.substring(1), p.substring(1));
else
return false;
}
while (i<m&&(sc[i]==pc[0]||(pc[0]=='.'&&m!=0)))
{
if(isMatch(s.substring(i), p.substring(2)))
return true;
i++;
}
return isMatch(s.substring(i), p.substring(2));
}
}