dp-字符串编辑

10. 正则表达式匹配

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

'.' 匹配任意单个字符
'*' 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

class Solution {
public:
    bool isMatch(string s, string p) {
        int m = s.size(),n = p.size();
        if(m == 0 && n == 0) return true;
        //简化问题
        s = '$'+s;
        p = '$'+p;
        bool dp[m+1][n+1];
        memset(dp,0,sizeof dp);
        dp[0][0] = 1;
        for(int i = 0; i <=m; i++) //空字符串也可能,所以要从0开始遍历,所以下面出现i-1的时候都要判断i
            for(int j = 1; j <= n; j++){
                if(p[j] == '.' || p[j] == s[i]) dp[i][j] |= i && dp[i-1][j-1];
                if(p[j] == '*'){
                    if(j >=1 && (p[j-1] == s[i] || p[j-1] == '.')) 
                    dp[i][j] |= i && (dp[i-1][j-1] // *等于第i个字符,*去掉
                    || dp[i-1][j]);// *等于第i个字符,*还在
                    //*代表0次
                    if(j>=2) dp[i][j] |= dp[i][j-2];
                }
                //cout << i << ' ' << j << ' ' << dp[i][j] << endl;
            }
        return dp[m][n];
        
        
    }
};
原文地址:https://www.cnblogs.com/Aliencxl/p/12333129.html