当前位置: 首页 > news >正文

【动态规划】LeetCode-10. 正则表达式匹配

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
解释:".*" 表示可匹配零个或多个('*')任意字符('.')。

提示:

1 <= s.length <= 20
1 <= p.length <= 20
s 只包含从 a-z 的小写字母。
p 只包含从 a-z 的小写字母,以及字符 . 和 *。
保证每次出现字符 * 时,前面都匹配到有效的字符
算法分析

解题思路
dp
image
image

class Solution {public boolean isMatch(String s, String p) {int n = s.length(), m = p.length();s = " " + s;p = " " + p;boolean[][] f = new boolean[n + 1][m + 1];f[0][0] = true;for (int i = 0; i <= n; i++) {for (int j = 1; j <= m; j++) {if (p.charAt(j) != '*') {f[i][j] = i != 0 && f[i - 1][j - 1] && (s.charAt(i) == p.charAt(j) || p.charAt(j) == '.');} else {f[i][j] = f[i][j - 2] || (i != 0 && f[i - 1][j] && (s.charAt(i) == p.charAt(j - 1) || p.charAt(j - 1) == '.'));}}}return f[n][m];}
}

复杂性分析

时间复杂度:O(mn)
空间复杂度:O(mn)

相关文章:

  • Selenium教程04:鼠标+键盘网页的模拟操作
  • 旋转图像(LeetCode 48)
  • 计算机网络-VLAN原理与配置
  • 跟我学c++中级篇——再谈C++20中的协程
  • leetcode07-罗马数字的转换
  • 盛最多水的容器【双指针】
  • 数据结构OJ实验14-哈希查找
  • Redisson依赖冲突记录
  • STC进阶开发(三)蜂鸣器、RTC时钟、I2C总线、外部中断、RTC闹钟设置、RTC计时器设置
  • C语言——指针
  • 百度吉利合作造车生态,极越“智价比”能否带来科技平权?
  • 数据库管理-第127期 LSM Tree(202301225)
  • openFeign服务调用
  • 惊人技术!重新定义人机互动:深入了解神经链接的脑机接口技术
  • Android studio 花式按键
  • 【comparator, comparable】小总结
  • Angular数据绑定机制
  • codis proxy处理流程
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Effective Java 笔记(一)
  • es的写入过程
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Vue UI框架库开发介绍
  • vue脚手架vue-cli
  • 半理解系列--Promise的进化史
  • 开源SQL-on-Hadoop系统一览
  • 两列自适应布局方案整理
  • 悄悄地说一个bug
  • 使用 @font-face
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 阿里云服务器如何修改远程端口?
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #define、const、typedef的差别
  • #define与typedef区别
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (五)MySQL的备份及恢复
  • (转)http-server应用
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET DataGridView数据绑定说明
  • .net6Api后台+uniapp导出Excel
  • .net反编译工具
  • .net下的富文本编辑器FCKeditor的配置方法
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @Import注解详解
  • @test注解_Spring 自定义注解你了解过吗?
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [ 蓝桥杯Web真题 ]-布局切换
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法