力扣第十题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];
}
相关推荐
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧18 分钟前
C++学习:基础知识的掌握
c++·visualstudio
Forever Nore2 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
C++ 老炮儿的技术栈6 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
new_zhou7 小时前
C++ 项目 AI 协作指南(Windows / MSVC 环境)
c++·人工智能·windows
水饺编程8 小时前
AT&T 汇编语言学习笔记开篇语
c语言·汇编·c++
Iruoyaoxh8 小时前
类和对象~
开发语言·c++
程序喵大人8 小时前
【C++进阶】STL算法与函数对象 - 04 find、count和any_of把查询写成意图
开发语言·c++·算法
豆沙沙包?8 小时前
c++中引用(P7-P11)
java·c++·算法
wuminyu9 小时前
虚拟线程底层ForkJoinPool的工作窃取算法机制
java·linux·c语言·jvm·c++
吹什么轩9 小时前
c++复习:c++11:lambda表达式
开发语言·c++