Leetcode刷题【10. 正则表达式匹配】

2023-05-16

力扣第10题,正则表达式匹配

题目描述:

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。

‘.’ 匹配任意单个字符
‘*’ 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

示例 1:

输入:s = “aa”, p = “a”
输出:false
解释:“a” 无法匹配 “aa” 整个字符串。

示例 2:

输入:s = “aa”, p = “a*”
输出:true
解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素,在这里前面的元素就是 ‘a’。因此,字符串 “aa” 可被视为 ‘a’ 重复了一次。

示例 3:

输入:s = “ab”, p = “."
输出:true
解释:".
” 表示可匹配零个或多个(‘*’)任意字符(‘.’)。

代码实现:

#include <stdbool.h>
#include <string.h>

bool isMatch(char* s, char* p) {
    int m = strlen(s), n = strlen(p);
    bool dp[m + 1][n + 1];
    memset(dp, false, sizeof(dp));
    dp[0][0] = true;
    for (int i = 0; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            if (p[j - 1] != '*') {
                if (i > 0 && (s[i - 1] == p[j - 1] || p[j - 1] == '.')) {
                    dp[i][j] = dp[i - 1][j - 1];
                }
            } else {
                if (j >= 2) {
                    dp[i][j] = dp[i][j - 2];
                    if (i > 0 && (s[i - 1] == p[j - 2] || p[j - 2] == '.')) {
                        dp[i][j] |= dp[i - 1][j];
                    }
                }
            }
        }
    }
    return dp[m][n];
}

解释:
这里使用一个二维数组 dp 来记录状态,其中 dp[i][j] 表示字符串 s 的前 i 个字符和字符串 p 的前 j 个字符是否匹配。初始状态是 dp[0][0] = true,表示两个空字符串匹配。

接下来使用两个循环遍历字符串 s 和字符串 p 的所有前缀,分别考虑 p[j-1] 为普通字符、为 ‘.’、为 ‘*’ 三种情况,依据上述状态转移方程进行状态转移,最终返回 dp[m][n],其中 m 是字符串 s 的长度,n 是字符串 p 的长度。

运行结果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode刷题【10. 正则表达式匹配】 的相关文章

  • 算法竞赛中常用的STL

    C 43 43 标准模板库 xff08 STL xff09 封装了大量十分有用的数据结构和算法 xff0c 熟练使用STL将会使我们的程序编写如虎添翼 接下来会介绍几种在程序竞赛中常用到的STL类 如果想了解更多 xff0c 推荐直接访问官
  • Lwip从入门到放弃之(一)---基础网络知识扫盲

    Lwip从入门到放弃之 基础网络知识扫盲 一 由于工作中用到了有关Lwip的有关知识 xff0c 本人作为一个网络通信协议的门外汉 xff0c 打算系统的学习一下以太网通讯的有关知识 而Lwip作为一款开源的轻量级TCP IP协议栈 xff

随机推荐

  • nginx电信合规100分配置

    在日常线上部署中 xff0c 总会遇到nginx配置基线漏洞 xff0c 整理了一份nginx100分配置分享下 可以通过基线扫描 nginx conf user nobody worker processes 1 error log lo
  • gitee码云webhook,代码提交后同步到服务器。

    1 创建脚本 xff0c 写入以下内容 脚本放入www根目录下 span class token delimiter important lt php span span class token variable json span spa
  • Socket接口编程

    简介 1 Socket 英文原意是 孔 或者 插座 的意思 在网络编程中 通常将其称之为 套接字 当前网络中的主流程序设计都是使用 Socket 进行编程的 因为它简单易用 更是一个标准 能在不同平台很方便移植 2 socket是统一的编程
  • Linux基础命令-chattr更改文件隐藏属性

    目录 前言 一 chattr命令介绍 二 语法及常用参数和模式 2 1 一样用help或man查看语法 2 2 常用参数 2 3 命令的模式 三 参考实例 3 1 给文件添加无法修改的权限 3 2 从指定文件移除隐藏属性 3 3 给目录添加
  • 四轴飞行器的串级PID参数整定经验

    串级PID即将两个PID控制器按照串联的方式连接起来 xff0c 前一个的输出作为后一个的输入两者共同控制控制对象 对于四旋翼来讲最普通的就是外环角度环 xff0c 内环角速度环 xff0c 两者怎么联系呢 xff0c 有的说法是 xff1
  • 嵌入式C语言复习——Day4

    嵌入式C语言复习 Day4 C语言函数的使用 1 函数概述 xff1a 一堆代码的集合 xff0c 用一个标签去描述它 xff0c 复用化 xff1b 函数三要素 xff1a 1 函数名 xff08 地址 xff09 2 输入参数 3 返回
  • C++基础复习——Day2

    类和对象 封装对象的初始化和清理构造函数和析构函数构造函数的分类及调用拷贝构造函数调用时机深拷贝与浅拷贝 C 43 43 对象模型和this指针友元运算符重载加号运算符重载左移运算符重载递增运算符重载赋值运算符重载 继承继承的基本用法继承方
  • 【模电基础复习】

    模拟电子技术 概念向 1 二极管杂质半导体的形成载流子是什么线性元件与非线性元件PN结形成原理及特性PN结的击穿二极管特性和主要参数二极管应用其他二极管类型 1 思考题为什么称空穴是载流子 xff1f 如何从PN结的电压电流特性方程来理解其
  • 【数电基础复习】

    数字电子技术 概念向 数制和码制数字量与模拟量位权十 二进制运算反码 补码奇偶校验 逻辑函数逻辑代数运算最小项和最大项逻辑函数化简方法 门电路CMOS门电路CMOS反相器CMOS电压传输特性和电流传输特性CMOS反相器静态输入特性和输出特性
  • 数据结构与算法——队列

    数据结构与算法 队列队列的链式存储结构创建一个队列入队列操作 出队列操作销毁一个队列 队列 队列 xff08 queue xff09 是只允许在一端进行插入操作 xff0c 而在另一端进行删除操作的线性表 与栈相反 xff0c 队列是一种先
  • 数据结构与算法——递归和分治

    数据结构与算法 递归斐波那契数列的递归实现 分治 递归 在现实当中 xff0c 我们只有在迫不得已的情况下才使用递归 xff0c 因为递归本身的效率并不理想 xff0c 但他的思想却值得我们留存在记忆之中 斐波那契数列的递归实现 使用递归实
  • 数据结构与算法——字符串

    数据结构与算法 字符串字符串的比较字符串的存储结构BF算法KMP算法 字符串 定义 xff1a 串 String 是由零个或多个字符组成的有限序列 xff0c 又名叫字符串 一般记为 s 61 a1a2a3 an n gt 61 0 串可以
  • 数据结构对齐规则(C语言)

    概念 xff1a 一些概念是为了容易理解 xff0c 自己定义的 1 基本对齐系数 xff1a 默认情况 xff1a 由编译器和操作系统决定 xff0c 一般来说32位系统对齐系数为4 xff08 字节 xff09 xff1b 64位系统对
  • ubuntu grace/xmgrace安装和使用

    grace是什么 xff1f Grace是 GRaphing Advanced Computation and Exploration of data 的缩写 它是在X Window系统和Motif下的所见即所得 xff08 所见及所得 x
  • OFDM多径传输时域和频域模型,以及循环前缀的作用

    1 多径信道传输模型 从信号传输的基本模型入手 考虑如下式所示的线性时不变系统 xff0c y t 61 h
  • 对单片机堆栈的理解

    看关于单片机方面的书籍的时候 xff0c 总是能看到别人说的一些堆栈啊什么的操作 xff0c 之前看到这个术语就直接跳过 xff0c 没想到去探究单片机内部的原理 但是最近课程学习微机原理这门课 xff0c 需要我们写汇编程序 xff0c
  • ROS 中package.xml文件详解01

    package xml文件时每一个ros包都要有的一个文件 xff0c 也是必须要包含的一个文件 1 最简单的xml文件 span class token operator lt span package format span class
  • 常用车载总线CAN、CAN FD、LIN、FlexRay、Ethernet介绍

    文章目录 前言 关于这些总线的详细介绍可分别参考如下 xff1a 一 为什么要这些总线二 车载总线的种类1 CAN1 1 CAN协议简介1 2 CAN协议特点 2 CAN FD2 1 CAN FD协议简介2 2 CAN FD协议特点 3 L
  • Leetcode刷题【8. 字符串转换整数】

    力扣第8题 xff0c 字符串转换整数 atoi 题目描述 xff1a 请你来实现一个 myAtoi string s 函数 xff0c 使其能将字符串转换成一个 32 位有符号整数 xff08 类似 C C 43 43 中的 atoi 函
  • Leetcode刷题【10. 正则表达式匹配】

    力扣第10题 xff0c 正则表达式匹配 题目描述 xff1a 给你一个字符串 s 和一个字符规律 p xff0c 请你来实现一个支持 和 的正则表达式匹配 匹配任意单个字符 匹配零个或多个前面的那一个元素 所谓匹配 xff0c 是要涵盖