dp+正则模拟——leetcode10
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]; } };