力扣第十题C++正则表达式匹配

题目

知识点

正则表达式

字符匹配

regex

题解

动态规划

注意或等于|=

cpp 复制代码
auto singleMatch(char c_s, char c_p) {
    if (c_s == '1') return false;//1和字符都不匹配
    if (c_p == '.') return true;//.和任何字符都匹配
    return c_s == c_p;//既不是1也不是.,直接返回两者比较后的结果
}
bool isMatch(string s, string p) {
    s = '1' + s;//占位字符
    p = '1' + p;

    int m = s.size();
    int n = p.size();
    //创建二维数组f,初始化都为false,f有m列,每列n个元素
    vector<vector<int>> f(m, vector<int>(n, false));
    f[0][0] = true;

    //按列填
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (p[j] == '*') {
                f[i][j] |= f[i][j - 2];//f[i][j] = f[i][j] || f[i][j - 2]
                if (singleMatch(s[i], p[j - 1])) {
                    f[i][j] |= f[i - 1][j];
                }
            }
            else {
                if ( singleMatch(s[i], p[j]) ) {
                    f[i][j] |= f[i - 1][j - 1];
                }
            }
        }//j
    }//i
    return f[m - 1][n - 1];
}
相关推荐
咩咦几秒前
C++学习笔记10:auto关键字
c++·学习笔记·c++11·auto·类型推导
csuzhucong7 分钟前
c++版本特性
开发语言·c++
YL2004042628 分钟前
046二叉树展开为链表
数据结构·leetcode·链表
Peter·Pan爱编程1 小时前
继承不是“拿来用“:is-a 关系与组合
c++
.小小陈.1 小时前
Linux 多线程进阶:线程互斥、同步、线程池、死锁与线程安全、读写锁、自旋锁
linux·开发语言·c++
lingran__1 小时前
C++入门基础
开发语言·c++
代码改善世界2 小时前
【C++进阶】二叉搜索树
java·数据结构·c++
春蕾夏荷_7282977252 小时前
c++ 编译abseil-cpp
c++·abseil-cpp
如竟没有火炬2 小时前
至少有K个重复字符的最长子串
开发语言·数据结构·python·算法·leetcode·动态规划
水蓝烟雨3 小时前
2359. 找到离给定两个节点最近的节点
算法·leetcode