深入浅出node. js+node学习指南书

208.6元

(需用券)

去购买 >

LeetCode–正则表达式匹配

博客说明文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

介绍

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

主站 10

题目

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

示例 1:输入:

s = "aa"

p = "a"

输出: false

解释: "a" 无法匹配 "aa" 整个字符串。

示例 2:输入:

s = "aa"

p = "a*"

输出: true

解释: 因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。

示例 3:输入:

s = "ab"

p = ".*"

输出: true

解释: ".*" 表示可匹配零个或多个('*')任意字符('.')。

示例 4:输入:

s = "aab"

p = "c*a*b"

输出: true

解释: 因为 '*' 表示零个或多个,这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 "aab"。

示例 5:输入:

s = "mississippi"

p = "mis*is*p*."

输出: false

s 可能为空,且只包含从 a-z 的小写字母。

p 可能为空,且只包含从 a-z 的小写字母以及字符 . 和 *,无连续的 '*'。

思路如果 BB 的最后一个字符是正常字符,那就是看 A[n-1] 是否等于 B[m-1],相等则看 A_{0..n-2}与 B_{0..m-2}

,不等则是不能匹配,这就是子问题。

如果 BB 的最后一个字符是'.',它能匹配任意字符,直接看 A_{0..n-2}与 B_{0..m-2}

如果 B 的最后一个字符是'',它代表 B[m-2]=c 可以重复0次或多次,它们是一个整体 c情况一:A[n-1] 是 0 个 c,B 最后两个字符废了,能否匹配取决于 A_{0..n-1}和 B_{0..m-3}是否匹配

情况二:A[n-1] 是多个 c 中的最后一个(这种情况必须 A[n-1]=c 或者 c='.'),所以 A 匹配完往前挪一个,B继续匹配,因为可以匹配多个,继续看 A_{0..n-2}和 B_{0..m-1}是否匹配。

代码class Solution {

public boolean isMatch(String s, String p) {

int n = s.length(), m = p.length();

boolean[][] f = new boolean[n+1][m+1];

for(int i = 0; i <= n; i++){

for(int j = 0; j <= m; j++){

if(j == 0){

f[i][j] = i == 0;

}else{ //非空正则

if(p.charAt(j-1) != '*'){ //非*

if(i > 0 && (s.charAt(i-1) == p.charAt(j-1) || p.charAt(j-1) == '.')){

f[i][j] = f[i-1][j-1];

}

}else{ //*

if(j >= 2){

f[i][j] |= f[i][j-2];

}

if(i >= 1 && j >= 2 && (s.charAt(i-1) == p.charAt(j-2) || p.charAt(j-2) == '.')){

f[i][j] |= f[i-1][j];

}

}

}

}

}

return f[n][m];

}

}

感谢Leetcode

以及勤劳的自己,个人博客,GitHub

java程序设计与数据结构(第4版)

116.1元

包邮

(需用券)

去购买 >

Leetcode怎么调试java代码,LeetCode–正则表达式匹配相关推荐

  1. Leetcode怎么调试java代码,IDEA2020.1使用LeetCode插件运行并调试本地样例的方法详解...

    环境: idea2020.1 插件: LeetCode-editor 6.7 一.IDEA安装LeetCode插件 安装完成重启idea 打开插件 URL可以选择国服和世界服.LoginName和Pa ...

  2. Leetcode怎么调试java代码,在Clion上调试LeetCode代码

    在Clion上调试LeetCode代码 在leetcode上做题调试起来总有些不方便,所以查阅了一些资料后,按以下配置,自我感觉效率还行,分享给大家.祝大家刷题愉快.并附上自己整理的leetcode4 ...

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

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

  4. chrome浏览器断点调试js代码 和 idea断点调试java代码

    文章目录 chrome调试js代码 idea调试java代码 chrome调试js代码 Chrome调试快捷键总结 快捷键 功能 F10 (step over) 单步调试.步过,遇到函数时也当成一个语 ...

  5. Eclipse远程调试Java代码的三种方法

    Eclipse远程调试Java代码的三种方法, 第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试, 第2种方法可以调试Java程序启动过程,但是Ecli ...

  6. 【java】jdb调试java代码

    jdb调试java代码 Java程序中有逻辑错误,就需要使用JDB来进行调试了.调试程序在IDE中很方便了,比如这篇博客介绍了在Intellj IDEA中调试Java程序的方法. 我们课程内容推荐在L ...

  7. eclipse 远程调试java_Eclipse远程调试Java代码的三种方法

    Eclipse远程调试Java代码的三种方法, 第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试, 第2种方法可以调试Java程序启动过程,但是Ecli ...

  8. LeetCode算法复健:10.正则表达式匹配

    10.正则表达式匹配 日期:2022/7/5 题目描述:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或 ...

  9. Java中的正则表达式匹配过程

    正则表达式:定义字符串的模式,用来对字符串进行搜索.编辑或处理文本. 目前的正则表达式引擎大体上可分为不同的两类:DFA和NFA,而NFA又基本上可以分为传统型NFA和POSIX NFA. DFA D ...

最新文章

  1. MATLAB里面的mean()如何使用:
  2. HMM中文分词分析 知乎
  3. 两大主流IT媒体全程解秘我的“心路历程”
  4. leetcode算法题--复数乘法
  5. android通讯录上传服务器,Android 实现读取通讯录并上传服务器
  6. python 二分查找_二分查找算法总结
  7. 认识python编程环境_认识Python和安装Python环境
  8. java python 运行 内存_Python C Java中字符串在内存中的存储
  9. 使用反射调用构造器创建对象
  10. gitlab去掉邮箱验证功能
  11. 13004.循环数组队列(C语言)
  12. Cognos11中通过URL访问report的设置
  13. 一个效果很好的outlookbar控件CXTOutBarCtrl
  14. 解析几何 —— 椭圆
  15. 关于升级到win10后的网络问题
  16. mdb新版本打不开_救命!!! 我打不开她给我的Pr工程……
  17. python中mid_Python生成音乐 之 mido库读取midi文件
  18. matlab2017安装完提示编译器,matlab2017a/b 编译器设置之无语神坑
  19. 抽样分布(卡方分布、t分布、F分布)
  20. 风暴数码论坛教程--精简APK/图片/铃声

热门文章

  1. 如何更好地优化大数据分析
  2. C++算法学习(力扣:1122. 数组的相对排序)
  3. .php on line 0,控制台运行php报错 undefined symbol: gdImageCreateFromJpeg in Unknown on line 0 解决方法...
  4. qt串口通信_Qt编写气体安全管理系统29-跨平台
  5. 2018年php框架,2018年的7个热门网站开发框架
  6. goldendb mysql_golden数据库
  7. AcWing 801. 二进制中1的个数
  8. awd赛题的flag是什么意思_写在新年伊始——由新年Flag所想到的
  9. 1. C++基础知识学习及其深入理解(面向对象部分还没学) -- 课程1完成
  10. 重要的Python数据分析库