class Solution {
public:
bool dp[1005][1005];
char S[1005],P[1005];
bool isMatch(string s, string p) {
int n=s.size(),m=p.size();
for(int i=0;i<n;i++)S[i+1]=s[i];
for(int j=0;j<m;j++)P[j+1]=p[j];
dp[0][0]=1;
for(int j=1;j<=m;j++){
if(P[j]=='*' && j-2>=0)dp[0][j]=dp[0][j-2];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(S[i]==P[j])dp[i][j]=dp[i-1][j-1];
else if(P[j]=='.')dp[i][j]=dp[i-1][j-1];
else if(P[j]=='*'){
if(P[j-1]=='.' || P[j-1]==S[i]){//*
dp[i][j]=dp[i][j-2]|| //*用来忽略前一位字符
dp[i][j-1]|| //*忽略
dp[i-1][j]; //*用来复制前一位字符
}
else dp[i][j]=dp[i][j-2];//*只能用来忽略前一位字符
}
}
return dp[n][m];
}
};