ソードフィンガーオファーインタビュー質問19.正規表現マッチング[難易度] | LeetCode10。正規表現マッチング-動的計画法

インタビューの質問19.正規表現のマッチング

10.正規表現マッチング

class Solution {
public:
    bool isMatch(string s, string p) {
        if(p.empty())   return s.empty();
        int m=s.size()+1;
        int n=p.size()+1;
        vector<vector<bool>> dp(m,vector<bool>(n,false));
        dp[0][0]=true;
        //dp[0][1]=false;
        for(int i=2;i<n;i++){
            int j=i-1;
            if(p[j]=='*')
                dp[0][i]=dp[0][i-2];
        }

        for(int i=1;i<m;i++){
            int a=i-1;
            for(int j=1;j<n;j++){
                int b=j-1;
                if(s[a]==p[b] || p[b]=='.' )
                    dp[i][j]=dp[i-1][j-1];
                else if(p[b]=='*'){
                    if(p[b-1]==s[a] || p[b-1]=='.')
                        dp[i][j]=dp[i][j-2]||dp[i-1][j];
                    else
                        dp[i][j]=dp[i][j-2];
                }
            }
        }
        return dp[m-1][n-1];
    }
};

 

おすすめ

転載: blog.csdn.net/qq_41041762/article/details/105890569