侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 10. 正则表达式匹配

Hope
2022-03-28 / 0 评论 / 0 点赞 / 265 阅读 / 538 字
温馨提示:
本文最后更新于 2022-04-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 10. 正则表达式匹配

思路:

以p[j]是否为'*'划分,
517C6B4BBB641F6E862C317584069413.png

代码:

class Solution {
public:
    bool isMatch(string s, string p) {
        //Dp
        int n = s.size(),m = p.size();
        s = ' ' + s;
        p = ' ' + p;
        
        vector<vector<bool>> f(n + 1, vector<bool> (m + 1));

        f[0][0] = true;

        for(int i = 0; i <= n; i++){
            //j == 0 开始没有意义
            for(int j = 1; j <= m; j++){
                //如果p当前的字符的下一个字符是* 需要在一起判断 所以当前不需要判断
                if(j + 1 <= m && p[j + 1] == '*') continue;
                if(i && p[j] != '*'){
                    f[i][j] = (s[i] == p[j] || p[j] == '.') && f[i - 1][j - 1]; 
                } 
                else if(p[j] == '*'){
                    f[i][j] = f[i][j - 2] || i && f[i - 1][j] && (s[i] == p[j - 1] || p[j - 1] == '.'); 
                }
            }
        }
        return f[n][m];
    }
};
0

评论区