剑指offer 面试题19. 正则表达式匹配 [困难] | LeetCode 10. 正则表达式匹配——动态规划

面试题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