由于这题给的是字符数组,所以被迫用DP;不然如果给的字符串的话,用递归更简单。
public class Solution {
public boolean match(char[] str, char[] pattern)
{
int m=str.length,n=pattern.length;
boolean[][] dp=new boolean[m+1][n+1];
dp[0][0]=true;
for(int i=1;i<=n;i++){
if(pattern[i-1]=='*') dp[0][i]=dp[0][i-2];
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(str[i-1]==pattern[j-1]||pattern[j-1]=='.')
dp[i][j]=dp[i-1][j-1];
else if(pattern[j-1]=='*'){
if(str[i-1]==pattern[j-2]||pattern[j-2]=='.'){
dp[i][j]|=dp[i][j-1];//1个a,相当于这个*是多余的
dp[i][j]|=dp[i-1][j];//多个a
dp[i][j]|=dp[i][j-2];//0个a
}else{
dp[i][j]|=dp[i][j-2];//0个a
}
}
}
}
return dp[m][n];
}
}