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];
    }
};
原文地址:https://www.cnblogs.com/zsben991126/p/12582050.html