字符串匹配一般不是dfs就是dp,能用dp就用dp。
dp转移不容易写全,总是WA
class Solution {
public:
bool isMatch(string s, string p) {
int N = p.length();
int M = s.length();
int dp[N+1][M+1];
memset(dp,0,sizeof(dp));
dp[0][0] = 1; // 空串dp是true
for(int i=1;i<=N;i++){
for(int j=0;j<=M;j++){
if(p[i-1] == '*' && (dp[i-1][j] || dp[i-2][j])) dp[i][j] = 1; // dp符号*向下生长
if(j>0 && p[i-1] == '*' && (p[i-2] == s[j-1] || p[i-2] == '.') && dp[i][j-1]) dp[i][j] = 1; //dp符号*向右生长
if(j>0 && (p[i-1] == '.' || p[i-1] == s[j-1]) && dp[i-1][j-1]) dp[i][j] =1; // dp向右下生长
}
}
return dp[N][M] == 1;
}
};