文章目录

  • 题目描述
  • 思路 && 代码
    • 二刷

打卡第十二天~

题目描述

  • 拖了超级久的一道题= =,懒得看正则表达式,但是其实和正则表达式相关的地方也不多

思路 && 代码

  • 参照这篇题解写的,dalao属实万物皆可动态规划。
  • 主要是分情况(见代码注释的Case),主要是:
    1. 空正则(正则表达式为 “” )
    2. 非空正则:
      a. 不是 ‘✳️’ 的情况
      b. 是 ‘✳️’ 的情况:重复 0 次的情况 && 重复的情况
  • |= 的考虑:2.a 和 2.b,只要满足其中一个即可
  • ‘.'的考虑:在这个代码里,实际上只是相当于一个万用符
  • 建议还是得动手画一遍表格来填,帮助理解。
class Solution {public boolean isMatch(String s, String p) {// init int m = s.length();int n = p.length();char[] arr1 = s.toCharArray();char[] arr2 = p.toCharArray();// dp[i][j] 代表 s 的前 i 个和 p 的前 j 个能否匹配boolean[][] dp = new boolean[m + 1][n + 1];// dp 过程for(int i = 0; i <= m; i++) {for(int j = 0; j <= n; j++) {// Case 1: 空正则if(j == 0) {dp[i][j] = (i == 0);}// Case 2: 非空正则else {// Case 2.1:不是'*'if(arr2[j - 1] != '*') {// 相等 or 为'.'的情况,直接看左上角的最优子结构if(i > 0 && (arr1[i - 1] == arr2[j - 1] || arr2[j - 1] == '.')) {dp[i][j] = dp[i - 1][j - 1];}}// Case 2.2:是'*'(最重要的部分)else {// Case 2.2.1:不看if(j >= 2) {// 重复0次,相当于直接砍掉最后两个字符dp[i][j] = dp[i][j - 2];}// Case 2.2.2:看if(i >= 1 && j >= 2 && (arr1[i - 1] == arr2[j - 2] || arr2[j - 2] == '.')) {// 多重复一次,和 s 串前移一位的结果一样// 为什么 |= ,相当于判断两次,只要有一次 true 就算 truedp[i][j] |= dp[i - 1][j];}}}}}return dp[m][n];}
}

二刷

  • 倒没想象中那么恶心了,主要还是分好情况,然后再考虑如何dp
  • 注意状态转移方程用到的最优子结构
class Solution {public boolean isMatch(String s, String p) {boolean[][] dp = new boolean[s.length() + 1][p.length() + 1];for(int i = 0; i <= s.length(); i++) {for(int j = 0; j <= p.length(); j++) {if(j == 0) {dp[i][j] = (i == 0);continue;}// Case 1: 没碰到 * 的情况if(p.charAt(j - 1) != '*') {if(i > 0 && (s.charAt(i - 1) == p.charAt(j - 1) || p.charAt(j - 1) == '.')) {dp[i][j] = dp[i - 1][j - 1];}}// Case 2: 碰到 * 的情况else {// Case 2.1:不用 * if(j >= 2) {dp[i][j] = dp[i][j - 2];}// Case 2.2:用 *if(i >= 1 && j >= 2 && (s.charAt(i - 1) == p.charAt(j - 2) || p.charAt(j - 2) == '.')) {// 重复了一次,说明可以套用上一个 i 的结果。dp[i][j] |= dp[i - 1][j];}}}}return dp[s.length()][p.length()];}
}

【LeetCode笔记】剑指Offer 19. 正则表达式匹配(Java、动态规划)相关推荐

  1. 【LeetCode】剑指 Offer 19. 正则表达式匹配

    [LeetCode]剑指 Offer 19. 正则表达式匹配 文章目录 [LeetCode]剑指 Offer 19. 正则表达式匹配 package offer;public class Soluti ...

  2. 剑指 Offer 19. 正则表达式匹配 regex_match() regex()

    一. 题目: 剑指 Offer 19. 正则表达式匹配 请实现一个函数用来匹配包含'. '和''的正则表达式.模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(含0次).在本题 ...

  3. 剑指 Offer 19. 正则表达式匹配

    剑指 Offer 19. 正则表达式匹配 https://leetcode-cn.com/problems/zheng-ze-biao-da-shi-pi-pei-lcof/ 请实现一个函数用来匹配包 ...

  4. 【leetcode】 剑指 Offer学习计划(java版本含注释)(上)

    目录 前言 第一天(栈与队列) 剑指 Offer 09. 用两个栈实现队列(简单) 剑指 Offer 30. 包含min函数的栈(简单) 第二天(链表) 剑指 Offer 06. 从尾到头打印链表(简 ...

  5. 剑指offer:正则表达式匹配

    题目描述 请实现一个函数用来匹配包括'.'和''的正则表达式.模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例 ...

  6. 剑指offer之正则表达式匹配

    题目 请实现一个函数用来匹配包括.和*的正则表达式.模式中的字符.表示任意一个字符,而*表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例如,字符串aaa ...

  7. 【LeetCode】剑指 Offer 04. 二维数组中的查找

    [LeetCode]剑指 Offer 04. 二维数组中的查找 文章目录 [LeetCode]剑指 Offer 04. 二维数组中的查找 package offer;public class Solu ...

  8. 《LeetCode力扣练习》剑指 Offer 24. 反转链表 Java

    <LeetCode力扣练习>剑指 Offer 24. 反转链表 Java 一.资源 题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1-& ...

  9. 《LeetCode力扣练习》剑指 Offer 05. 替换空格 Java

    <LeetCode力扣练习>剑指 Offer 05. 替换空格 Java 一.资源 题目: 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输 ...

最新文章

  1. php in yii framework
  2. 重磅官宣:评职称将不做论文数量硬性要求!职称改革任务总体完成
  3. opencv 凹凸性检测 和 缺陷分析
  4. python之vscode中手动选择python解释器(mac)
  5. springboot+mybatis集成自定义缓存ehcache用法笔记
  6. 哈佛成功金句 -25则
  7. php中函数封装怎么弄,php封装函数步骤
  8. pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...
  9. mysql 5.7.26安装步骤_centOS7.4 安装 mysql 5.7.26的教程详解
  10. REST another WebService???
  11. CareUEyes Pro(电脑防蓝光软件)官方中文版V2.0.0.9 | 电脑护眼软件下载
  12. Java设置PPT幻灯片背景——纯色、渐变、图片背景
  13. Illustrator CS2入门与实战视频教程
  14. nginx启动提示nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
  15. Elastic认证考试过程(2022.11.13 06:15)
  16. [AAM-GCN Neurocomputing2021] Attention adjacency matrix based graph convolutional networks for skele
  17. macbookpro 2021 各种软件设置中找不到麦克风权限问题
  18. 【内核笔记】博文2021回顾-2022规划
  19. python股票自动 选股 与 止损 止盈 脚本
  20. 支持html5特性的浏览器,五大主流浏览器对CSS3和HTML5特性支持情况的详细清单

热门文章

  1. Leetcode--191. 位1的个数
  2. 信号时频图的横纵坐标对调
  3. response.end后抛了异常_(七)异常处理
  4. ospf hello时间和dead_网络工程师_思科 | OSPF由简到难,配合命令学
  5. python assert函数
  6. matlab调用ANSYS--------2
  7. python压缩文件
  8. AN IMAGE IS WORTH 16X16 WORDS :TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE(VIT)
  9. 图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)
  10. LeNet网络配置文件 lenet_train_test.prototxt