workbench字符匹配错误_猪憨憨刷题笔记-LeetCode-10 正则表达式匹配
![](/assets/blank.gif)
题目:给定字符串s和模式串p(正则字符串),p中含有‘.’和‘*’为特定字符,需要使用匹配整个字符串s。
- ‘.’匹配任意单个字符
- ‘’匹配零个或多个前面的元素,即“c*”可以匹配任意多个‘c‘,‘.*’可以匹配任意多个字符
样例输入:s="mississippi", p="mis*is*p*.",return:false;
思路:若字符串s的长度为m,模式串p长度为n,则题目解应为模式串的前n个字符是否可以成功匹配字符串的前m个字符,这样题目即可以继续抽象为更小的子问题,字符串s的前m'个字符是否可以使用模式串p的前n'个字符成功匹配(0<m'≤m,0<n'≤n),这样可以使用动态规划来解决这个问题,使用01背包模板,对子字符串 s[0 : m']逐字符考察模式串 p[0 : n']是否可以成功匹配。
转移方程如下:
- 当
时,或 p[ n' ] = '.' 时,表示子串 s[0 : m']使用模式子串 p[0 : n'] 时匹配的结果会与子串 s[0 : m' - 1] 使用模式子串 p[0 : n' - 1] 匹配时状态相同;
- 当
时,表示可以使用模式串的上一位字符 p[n' - 1] ,若
或
时,可以使用上一位匹配的结果对当前位置的状态进行更新,若仅匹配上了一位字符,即子串 s[0 : m'] 可以使用模式子串 p[0 : n' - 1]成功匹配,状态转移方程为
(这里 '*' 并没有起到作用,但是该状态可以作为中间状态用于‘*’匹配到了多个相同字符时的更新);若已经使用‘*’匹配到了多个字符串并且还可以使用该字符串继续进行匹配时,即使用模式子串 p[0 : n'] 对子串s[0 : m'] 进行匹配后的状态与使用模式子串 p[0 : n'] 对 s[0 : m' - 1]进行匹配的状态相同,转移方程为
;若不使用任何一个‘*’对子串 s[0 : m'] 进行匹配时需要保证正确的状态,状态为
(eg. 如果去掉这个转移方程,若s = "asdfa",p = "asdf.*a",dp矩阵第四行中只有 dp[4][4]为true,dp[4][6]为false;第五行中‘.’匹配‘a’成功dp[5][5]为true,dp[5][6]通过dp[5][5]得到true状态,但dp[5][7]只能从dp[4][6]请求状态,只能得到false,故错误,正确情况dp[4][6]应考虑不使用‘*’进行匹配,可以为true);
- 当
但子串上一位并没有成功匹配的情况下,如2情况最后一种小情况考虑,直接继承前两位的状态即可。
代码如下:
public class RegularExpressionMatching {public boolean isMatch(String s, String p) {boolean[][] dp = new boolean[s.length() + 1][p.length() + 1];dp[0][0] = true;for (int i = 0; i < p.length(); i++) {if (p.charAt(i) == '*')dp[0][i + 1] = dp[0][i - 1];}for (int i = 0; i < s.length(); i++) {for (int j = 0; j < p.length(); j++) {if (p.charAt(j) == s.charAt(i) || p.charAt(j) == '.')dp[i + 1][j + 1] = dp[i][j];else if (p.charAt(j) == '*' &&(p.charAt(j - 1) == '.' || s.charAt(i) == p.charAt(j - 1))) {dp[i + 1][j + 1] = dp[i + 1][j] || dp[i][j + 1] || dp[i + 1][j - 1];} else if (p.charAt(j) == '*') {dp[i + 1][j + 1] = dp[i + 1][j - 1];}}}return dp[s.length()][p.length()];}
}
其中初始化第0行的意思是使用模式串对空串进行匹配时的状态。
github:
https://github.com/AbelSara/LeetcodeNotegithub.com
欢迎交流。
workbench字符匹配错误_猪憨憨刷题笔记-LeetCode-10 正则表达式匹配相关推荐
- 《剑指 Offer I》刷题笔记 1 ~10 题
<剑指 Offer I>刷题笔记 1 ~10 题 栈与队列(简单) 1. 用两个栈实现队列 _解法 1:暴力做法 解法 2:优化解法 1 2. 包含 min 函数的栈 _解法 1:pop( ...
- [动态规划] leetcode 10 正则表达式匹配
[动态规划] leetcode 10 正则表达式匹配 1.题目 题目链接 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 ...
- Java实现 LeetCode 10 正则表达式匹配
10. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配, ...
- LeetCode 10. 正则表达式匹配(递归/DP)
文章目录 1. 题目 2. 解题 2.1 递归 2.2 DP 1. 题目 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 ...
- leetcode 10 --- 正则表达式匹配
1 题目 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 ...
- LeetCode 10.正则表达式匹配(动态规划)
题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '' 的正则表达式匹配. '.' 匹配任意单个字符 '' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字 ...
- python刷题笔记怎么改_python面试题刷题笔记1 - 10
函数参数传递:对象分为多变的对象和不变的对象.在python中,字符串.元组数字是不变的对象.列表,dict类型.设置等改变的对象.当引用传递给一个函数,函数的一个副本参考自动复制.这个函数的引用无关 ...
- LeetCode 10 正则表达式匹配
https://leetcode-cn.com/problems/regular-expression-matching/ 解决方案 class Solution {public boolean is ...
- 《刷题笔记》牛客网 字符集合(一刷)
<刷题笔记>牛客网 字符集合(一刷) 文章目录 <刷题笔记>牛客网 字符集合(一刷) 1.题目分析: 2. 思路分析 3. 代码: 总结 1.题目分析: 本题有多组输入,题目的 ...
- leetcode分类刷题笔记
leetcode分类刷题笔记--基于python3 写在前面 1.做题如果实在想不出时间复杂度比较优的解法,可以先写出暴力解法,尝试在其基础上优化 2.排序.双指针.二分等--经常可以优化时间复杂度 ...
最新文章
- C++常见面试题之数据结构和算法
- python函数图像加标签_tkinter(py3)更改图像标签,函数内部,实时
- Beautiful Array
- Windows勾子处理类Thook 以及示例
- linux6.6 sudo环境变量,linux sudo环境变量设置
- sql运算符_SQL AND运算符解释语法示例
- android动画之布局动画,Android动画--布局动画 LayoutAnimation
- java 从已知日期计算干支纪日_两个日期计算
- 搭建linux环境的tomcat服务器
- 写给程序员和UI--Android的切图标准
- 小程序模板订阅操作【小程序订阅消息】
- 2022年证券从业资格证券投资基金考试多选题专练及答案
- 加载插件Apk中的类
- 《刻意练习》读书心得 驳斥1万小时定律、有目的的练习、自我实现的预言、走出舒适区
- 1 STM32F407ZG的简单介绍
- ajax 中的contentType
- 对 oc 学习的 阶段反思
- 【金三银四】 一文弄懂 js 数据类型、堆栈内存、作用域(链)、闭包知识拓展 (一)
- Wulihub设计文档类在线托管分享平台
- HTML文档基本格式详细介绍
热门文章
- 毕设题目:Matlab优化充电
- 【优化算法】未来搜索优化算法(FSA)【含Matlab源码 1448期】
- 【图像处理基础】基于matlab GUI图片浏览器【含Matlab源码 1015期】
- 【语音隐写】基于matlab GUI DWT音频数字水印【含Matlab源码 712期】
- 【背包问题】基于matlab量子免疫克隆算法求解背包问题【含Matlab源码 424期】
- 【车间调度】基于matlab粒子群算法求解6X6车间调度问题【含Matlab源码 411期】
- 【数字信号】基于matlab 8级m序列【含Matlab源码 353期】
- python执行sql语句慢很多_Python学习教程:面试问:一条SQL语句执行得很慢的原因有哪些?...
- 游戏行业数据类丛书_理论丛书:高维数据101
- 算法与数据结构篇(暂未解答)