力扣第十题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];
}
相关推荐
米粒19 小时前
力扣算法刷题 Day 29
算法·leetcode·职场和发展
wfbcg9 小时前
每日算法练习:LeetCode 125. 验证回文串 ✅
算法·leetcode·职场和发展
We་ct9 小时前
LeetCode 295. 数据流的中位数:双堆解法实战解析
开发语言·前端·数据结构·算法·leetcode·typescript·数据流
十年编程老舅9 小时前
窥探内核心脏:深入解析 proc 虚拟文件系统
linux·服务器·数据库·c++·linux内核·文件系统·读写锁
xiaoye-duck10 小时前
【C++:哈希表】从哈希冲突到负载因子:深入探索开放定址与链地址法的核心机密
数据结构·c++·散列表
小辉同志10 小时前
739. 每日温度
c++·算法·leetcode
Via_Neo10 小时前
二进制枚举
数据结构·算法·leetcode
羊小猪~~11 小时前
Redis学习笔记(数据类型、持久化、事件、管道、发布订阅等)
开发语言·数据库·c++·redis·后端·学习·缓存
小菜鸡桃蛋狗11 小时前
C++——模板
c++
程序喵大人11 小时前
C++依赖关系分析:5个工具理清模块关系
开发语言·c++