10.正则表达式匹配

ROS从入门到精通0-4:VSCode 搭建 ROS 工程环境 为了提高开发效率,可以先安装集成开发工具和使用方便的工具,本教程用VSCode搭建ROS工程环境 阅读详情

10.正则表达式匹配

给定一个字符串 (s) 和一个字符模式 §。实现支持 ‘.’ 和 ‘*’ 的正则表达式匹配。

‘.’ 匹配任意单个字符。
‘*’ 匹配零个或多个前面的元素。
匹配应该覆盖整个字符串 (s) ,而不是部分字符串。

说明:
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。

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

示例 2:
输入:
s = “aa”
p = “a*”
输出: true
解释: ‘*’ 代表可匹配零个或多个前面的元素, 即可以匹配 ‘a’ 。因此, 重复 ‘a’ 一次, 字符串可变为 “aa”。

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

示例 4:
输入:
s = “aab”
p = “c*a*b”
输出: true
解释: ‘c’ 可以不被重复, ‘a’ 可以被重复一次。因此可以匹配字符串 “aab”。

示例 5:
输入:
s = “mississippi”
p = “mis*is*p*.”
输出: false

解题思路

  • 动态规划,dp[i][j]表示s[0-i]和p[0-j]是否匹配,问题即为求解dp[len(s)][len(p)]
  • dp状态转移:
  • 判断p[j],求dp[i+1][j+1](判断p[j-1],求dp[i][j]):
  • p[j-1]有三种情况:‘*’ ‘.’和普通a-z字符
    • p[j]为*:
      匹配0个前一字符,即跳过前一字符,则 dp[i]][j] = dp[i][j-2]
      匹配1个前一字符,则 dp[i][j] = (s[i] == p[j-1] || '.' == p[j-1]) && dp[i-1][j-2])
      匹配多个前一字符,则 dp[i][j] = (s[i] == p[j-1] || '.' == p[j-1]) && dp[i-1][j])
    • p[j]为.:当前的单个字符肯定匹配,字符串的匹配状态由前一状态决定
      dp[i][j] = dp[i-1][j-1]
    • p[j]为a-z:直接判断是否匹配
      dp[i][j] = s[i] == p[j] && dp[i-1][j-1]
  • 初始化:dp[0][0] = true,dp[i][0] = false
class Solution {
public:
    bool isMatch(string s, string p) {
        int lens = s.size(),lenp=p.size();
        vector<vector<bool>>dp(lens+1,vector<bool>(lenp+1,false));
        dp[0][0]=true;
        
        for(int i=0;i<=lens;i++){
            for(int j=1;j<=lenp;j++){
                if(p[j-1]=='*'){
                    dp[i][j] = dp[i][j-2] || (i>0 && (s[i-1]==p[j-2] || p[j-2]=='.') && (dp[i-1][j-2] || dp[i-1][j]));
                }else if(p[j-1]=='.'){
                    dp[i][j] = i>0 && dp[i-1][j-1];
                }else{
                    dp[i][j] = i>0 && s[i-1]==p[j-1] && dp[i-1][j-1];
                }
            }
        }
        return dp[lens][lenp];
    }    
};
STM32CubeMX之DAC产成正弦波 “在之前的文章中曾经介绍过用TIM产生PWM做DAC用,STM32定时器输出PWM做DAC。部分型号的STM32单片机内部有专用的DAC,本篇文章将介绍如何用内部DAC+DMA产生正弦波... 阅读详情

相关推荐

Hyper-V集群部署指南

工欲善其事,必先利其器。搭建一个方便管理的服务集群,是分布式学习很重要的环境。 目前流行的虚拟机产品主要为Vmware 和 win10自带的Hyper-V(win10家庭版无此功能),网上关于Vmware的教程更多,显然它更容易上手,但Hyper-V也算是一个很不错的产品,这里记录一下我的学习过程: 目录 Hyper-V的安装 服务集群的搭建 虚拟机的网络通信 NAT网络的搭建 端口映射 Linux的静态IP 虚拟机的自启动问题 Hyper-V的安装 也不能算说是安装,如果你的win1

Swing 6921

在 sql 中使用正则表达式

新建测试表: -- Table: public.table01 -- DROP TABLE public.table01; CREATE TABLE IF NOT EXISTS public.table01 ( id bigint NOT NULL, name character varying COLLATE pg_catalog."default" NOT NULL, age integer, CONSTRAINT table01_pkey PRIMARY KEY

aqin1012的博客 22万+

基于深度强化学习的柔性作业车间动态调度

在追求敏捷和灵活的生产调度方面,处理不可预测的动态事件的能力变得越来越重要。与此同时,生产系统中的网络-物理融合产生了大量需要实时挖掘和分析的工业数据。为了便于这种实时控制,本研究提出了一种分层分布式的体系结构来解决动态柔性作业车间调度问题。采用双深度Q网络算法(DDQN)训练调度智能体,捕捉生产信息与调度目标之间的关系,为具有恒定任务到达的柔性作业车间实时做出调度决策。为了处理动态调度中问题的可变规格说明,提出了专门的状态和动作表示法。此外,还提出了一种代理奖励整形技术(surrogate reward

太剧烈的快乐与太剧烈的悲哀是有相同之点的——同样地需要远离人群! 1万+

LeetCode C++ 剑指 Offer 19. 正则表达式匹配【动态规划/递归】困难

请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。 示例 1: 输入: s = "aa" p = "a" 输出: false 解释: "a" 无法匹配 "aa" 整个字符串。 示例 2: 输入: s = "aa" p = "a*" 输出: true 解释: 因为 '

memcpy0的博客 680

苹果开发者账号注册指南:解决Apple Developer app证件验证失败问题

本文详细解析了苹果开发者账号注册中证件验证失败的常见原因与解决方案。核心在于确保Apple ID、设备与iCloud信息一致,并提供了从官方支持联系到材料准备的全流程操作指南,帮助开发者高效解决“未能验证证件”问题,顺利完成注册。

weixin_29232507的博客 2254

图解说明JLink驱动与目标板电源匹配的关键细节

深入讲解JLink驱动安装及使用过程中,如何正确匹配目标板电源,避免常见通信故障。通过图解方式清晰展示关键连接细节,确保调试稳定可靠,是嵌入式开发中不可或缺的实战经验分享。

weixin_42173218的博客 431

正则表达式(Regular Expression)基本语法

一、简介 为什么需要正则表达式? 文本的复杂处理正则表达式的优势和用途? 一种强大而灵活的文本处理工具; 大部分编程语言、数据库、文本编辑器、开发环境都支持正则表达式。正则表达式定义: 正如它的名字一样,是描述了一个规则,通过这个规则可以匹配一类字符串。 学习正则表达式很大程度上就是学习正则表达式的语法现则。开发中如何使用? 开发中使用正则表达式的流程: 分析所要匹配的数据,写出测试

吃果冻不吐果冻皮 2万+

Python实现将pdf,docx,xls,doc,wps,zip,xlsx,ofd链接下载并将文件保存到本地

本文是该专栏的第31篇,后面会持续分享python的各种干货知识,值得关注。在工作上,尤其是在处理爬虫项目中,会遇到这样的需求。访问某个网页或者在采集某个页面的时候,正文部分含有docx,或pdf,或xls,或doc,或wps等链接。需要你使用python自动将页面上含有的这些信息链接下载并保存到指定文件夹。遇到这种情况需要怎么做呢?别担心,跟着笔者直接往下看正文的详细解决方法。(附完整代码)在有些网页的正文中,有时会有如下图中的doc链接。比如爬虫在采集正文数据的时候,像标题,正文内容,作者,发布时间等等

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 4147

正则表达式全集

表达式全集字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。 ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp对象的M...

qishibu110的博客 149

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

融合方式技术路径优点局限或注意事项UI 嵌入iframe 表单嵌入快速集成、用户体验一致无法自定义交互逻辑明道云调用 DifyAPI 请求节点工作流自动化、逻辑灵活有 timeout 限制、需优化 promptDify 调用明道云插件或 API 调用节点可查询实际业务数据、增强 AI 智能需理解明道云 API 结构、权限设置复杂明道云与 Dify 的结合为低代码平台注入了智能动力。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1187

18、近端策略优化(PPO)算法详解

本文详细介绍了近端策略优化(PPO)算法的理论基础、算法流程、实现方法及实际应用。PPO作为当前最受欢迎的策略梯度算法之一,具有易于实现、计算成本低、样本效率高和性能优越等优点。文章对比了基于自适应KL惩罚和基于裁剪目标的两种PPO变体,重点解析了裁剪目标函数的设计原理及其在Actor-Critic框架下的实现方式,并通过Atari Pong游戏展示了完整的训练配置与流程。最后总结了PPO的优势、适用场景及未来发展方向,为强化学习研究者和实践者提供了全面的参考。

mongodb5scout的博客 180

LeetCode-10 正则表达式匹配

LeetCode10 看似是一个字符串问题,实则是动态规划问题 越长的字符串匹配结果依赖于较短的字符串匹配结果 首先有两层for循环,外层是遍历源字符串s,内层是遍历正则串p,这样可以将字符串由短至长对正则表达式进行匹配 设dp[i][j]dp[i][j]dp[i][j]表示s串到iii位置和p串到jjj位置的匹配结果,有0和1两种 对于p正则串,有两个特殊符号...和∗*∗ 如果遇到了∗*∗ ∗*∗前面的字符可以为0个或者多个,判断这个x∗x*x∗组合的p[j−1]p[j-1]p[j−1]是不是等于字

CC_且听风吟丶的博客 910

手机开发实战58——小区广播介绍2

业务 针对小区广播短消息的特点,可以提供一些基于目前短消息不能或不适合提供的服务: 1. 显示网络服务基站名称:用户可以随时了解手机登记在哪个基站下,特别是在边界交叉覆盖区域,用户可以清楚的知道通话建立在哪个基站下,在用户投诉和故障描述中也会有所帮助; 2. 提供用户问候信息:可以在覆盖机场、车站等地区的基站广播一些用户问候语或一些企业形象广告语; 3. 充分利用小区广播地

xjbclz的专栏 772

leetcode10正则表达式匹配

为便于状态更新,减少对边界的判断,初始二维 dpdpdp 数组维度为 (m+1)×(n+1),其中第一行和第一列的状态分别表示字符串 s 和 p 为空时的情况。,j]无法与空字符匹配,因此有 dp[0][j]=False;而当 p[j]=p[j]=p[j]=’显然,dp[0][0]=True。对于其他 dp[0][j],当 p[j]≠p[j]='这道题的正则匹配规则主要是 ’ * '、 ’ . ’ 这两个特殊字符的使用。'时,则有 dp[0][j]=dp[0][j−2]。总的来看,当 p[j]= '

qq_45972323的博客 1078

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Leetcode 10. 正则表达式匹配 C++

Leetcode 10. 正则表达式匹配 题目 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。 测试样例 1.输入: s = “aa” p = “a” 输出: false 解释: “a” 无法匹配 “aa” 整个字

weixin_43750513的博客 332

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LeetCode 10.正则表达式匹配

LeetCode 10.正则表达式匹配 双序列型动态规划 确定状态: 设A长度为m,B的长度为n 如果B[n-1]是一个正常字符(非.非*),则如果A[m-1]=B[n-1],能否匹配 取决于A[0..m-2]和B[0..n-2]是否匹配;否则不能匹配 如果B[n-1]是.,则A[m-1]一定是和.匹配,之后能否匹配取决于A[0..m-2] 和B[0..n-2]是否匹配 如果B[n-1]是* ,...

未命名 213

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode 10:正则表达式匹配

LeetCode 10正则表达式匹配问题要求实现支持.和*的完全匹配。核心解法是动态规划:定义二维数组dp[i][j]表示字符串s前i个字符与模式p前j个字符的匹配状态。初始化处理空匹配和*前缀情况,状态转移分两种情况:当p[j-1]不是*时需字符匹配;当遇到*时考虑匹配0次或多次。算法时间复杂度O(mn),空间复杂度O(mn)。这种解法通过DP表精确处理了*的灵活性,确保了匹配的正确性。

m0_75126572的博客 734

力扣10.正则表达式匹配

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

一位想要成为优秀全栈工程师的有志青年! 1042

LeetCode10-正则表达式匹配

LeetCode10-正则表达式匹配 给定一个字符串 (s) 和一个字符模式 §。实现支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符。 ‘*’ 匹配零个或多个前面的元素。 匹配应该覆盖整个字符串 (s) ,而不是部分字符串。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。 示例 1: 输入: ...

lyd1995的博客 277

LeetCode 10正则表达式匹配

LeetCode 10正则表达式匹配 题目简述:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。'.'匹配任意单个字符,'*' 匹配零个或多个前面的那一个元素。所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 输入:s = “aa” p = “a*” 输出:true 输入:s = “ab” p = “.*” 输出:true 输入:s = “aab” p = “c*a*b” 输出:true 输入:s = “

XBlog 302

leetcode 10 正则表达式匹配

leetcode 10 正则表达式匹配 题目说明: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 题目链接:添加链接描述 解题思路:采用动态规划进行求解,dp[i][j]表示s的前i个字符串能否和p的前j个字符串进行匹配。初始时dp[0][0]皆为true。 则当s[i]p[j]||p[j]’.‘时,dp[i][j]=dp[i-1][j-1]|dp[i][j] 当p[j]==’'时,若 j>=2j>=2,dp(i,j) 可以从 dp(i,j

小白的成长 208

力扣10 正则表达式匹配

力扣第十题,正则表达式匹配,动态规划,动态规划表

sxycylq的博客 135

10. 正则表达式匹配

Leetcode 10. 正则表达式匹配 题目说明 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1: 输入:s = “aa” p = “a” 输出:false 解释:“a” 无法匹配 “aa” 整个字符串。 示例 2: 输入:s = “aa” p = “a*” 输出:true 解释:因为 ‘*’ 代表可以匹配零个或多个前面

qq_33511971的博客 258

正则匹配字符串无匹配不到_Leetcode10 正则表达式匹配

Leetcode10 正则表达式匹配一茶一题一整天,最后还是在评论和题解区的参考下通过了全部case。这道题难在哪里呢?一是首先要想清楚解题方法:动态规划;二是转移方程怎么写(要考虑.和*的特殊字符),这道题里面的启示是转移方程不单单可以看当前的字符,也可以把当前和上一个字符一起来考虑。1.题目描述题目要求: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表...

weixin_39614146的博客 144

【LeetCode】10. 正则表达式匹配

本文介绍了正则表达式匹配问题的动态规划解法。题目要求实现支持"."和""的正则匹配,其中"."匹配任意字符,""匹配零或多个前驱字符。通过二维DP表记录状态转移,处理字符匹配、星号处理和通配符三种情况。解法分析表明,动态规划方法时间复杂度为O(mn),空间复杂度可优化至O(n)。文章详细阐述了DP表构建过程、边界条件处理和优化策略,并对比了不同解法的优劣。该算法在文本处理、数据验证等场景有重要应用,通过合理设计测试用例可验证其正

qq_32019341的博客 1102

LeetCode第10题_正则表达式匹配

这是一道经典的动态规划题目:需要清晰的状态定义复杂的状态转移方程边界情况的处理两种解法比较:动态规划:效率更高,空间复杂度较大递归:代码简洁,但可能栈溢出优化思路:可以使用滚动数组优化空间可以添加记忆化搜索优化递归。

qq_40263592的博客 959
上一篇: 密码验证合格程序
下一篇: 11.盛水最多的容器
ChenyutingZJU
博客等级 码龄10年 18粉丝 248原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值