zoukankan      html  css  js  c++  java
  • 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];
            
            
        }
    };
  • 相关阅读:
    文件输入输出
    快速幂
    Vijos1512 SuperBrother打鼹鼠
    P2564 生日礼物
    P1886 滑动窗口
    P1540 机器翻译
    TYVj1939 玉蟾宫
    P1988 最大数
    二分图匹配
    [GDOI2017集训&做题记录&日记]
  • 原文地址:https://www.cnblogs.com/Aliencxl/p/12333129.html
Copyright © 2011-2022 走看看