LeetCode题目: 10. Regular Expression Matching

★leetcode10_Regular Expression Matching[附动态规划] 一.问题描述 Implement regular expression matching with support for '.' and '*'. '.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the ent 阅读详情

LeetCode题目: 10. Regular Expression Matching

原题链接:https://leetcode.com/problems/regular-expression-matching/description/

解题思路:

此题输入为两个字符串s和p,题目要求是完全匹配,即存在一种可能,使s==p。

‘.’意为随便代表一个字符。

‘*’意为可匹配一个或多个前继字符。

(PS:’*’和前面的字符结合使用 。即:”a*”=>”“,”a”,”aa”…而不是”a”,”aa”…

例如:”” == “a*b*”)

由于*有多种可能,因此用递归来解。每次遇到’*’,分为多种情况,即匹配0个,匹配1个,匹配2个….全部匹配,递归得到结果。

核心思想:

基本情况:

1.如果子字符串为空而父字符串不为空,或父字符串为空而子字符串不为空,返回false。

递归情况:

1.如果两个字符串的首字母是否相等或其中之一为’.’,父子串都递归到下一位。

2.如果父字符串为’*’,分为多种情况,各自进行递归,如果出现true,则返回true,如果全为false,则返回false

代码细节:

  1. 用sbegin和pbegin代替s和p字符串的当前匹配位置
  2. 基础情况中,如果s为空,p不为空,也有可能匹配
  3. ‘*’情况中,对n个重复的字符,存在n+1种匹配方法,只要其中之一符合即可

坑点:

  1. “” == “”

  2. “” == “a*b*”

  3. ‘*’不一定要匹配所有相同的字符 (“aab” == “a*ab”)


代码:

bool isEqual(char a, char b) {
    return a == b || b == '.';
}

// 递归求解,每次只判断一个字符 
bool recur(string &s, string &p, int sbegin, int pbegin) {
    // 基础情况:s为空
    if (s.size() - sbegin == 0) {
        if (p.size() - pbegin == 0)  return true;
        else if (p.size() - pbegin >= 2 && p[pbegin + 1] == '*')
            return recur(s, p, sbegin, pbegin + 2);
        return false;
    }

    // 基础情况:p为空,s不为空 
    if (p.size() - pbegin == 0)  return false;

    // 递归情况
    // 情况1:遇到星号 (此处可用递归) 
    if (pbegin + 1 < p.size() && p[pbegin + 1] == '*') {
        // 如果之后有其中之一完全匹配,即完全匹配 
        int i;
        // 匹配1-n个相同字符 
        for (i = sbegin; i < s.size() && isEqual(s[i], p[pbegin]); i++)
            if (recur(s, p, i, pbegin + 2))  return true;
        // 匹配所有相同字符,或者字符根本不相同 
        return recur(s, p, i, pbegin + 2); 
    }

    // 情况2:一般字符匹配 
    if (isEqual(s[sbegin], p[pbegin])) 
        return recur(s, p, sbegin + 1, pbegin + 1); 

    return false;
}


bool isMatch(string s, string p) {
    return recur(s, p, 0, 0);
}
香橙派OPi 6系列选型指南:RK3588与RK3588S开发板深度对比 开发板选型是嵌入式系统设计的关键环节,尤其在边缘计算和AI推理等场景中,芯片的差异直接影响硬件架构。瑞芯微RK3588及其精简版RK3588S是当前高端开发板的核心方案,两者在PCIe通道、显示输出和SATA支持上存在显著区别。理解这些原理,有助于工程师根据项目需求快速匹配产品。香橙派OPi 6系列基于这两款芯片,衍生出OPi 6、OPi 6 Pro与OPi 6 Max三种形态:紧凑型适合嵌入式门禁与AI盒子,Pro版凭借双屏异显和PCIe 3.0满足收银机与视频分析,Max的双2.5G网口和大内存则面向轻 阅读详情

相关推荐

Vertx之Grpc消息发送

介绍 Vert.x gRPC 模块,它将 Google gRPC 的编程风格与 Vert.x 风格保持一致. gRPC 是一个高性能、开源、通用的RPC框架,是一种进程间通讯技术,由Google推出,基于HTTP2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言。gRPC提供了一种简单的方法来精确的定义服务,并且为客户端和服务端自动生成可靠的功能库。 在gRPC客户端可以直接调用不同服务器上的远程程序,使用姿势看起来就像调用本地程序一样,轻松的实现远端服务的连接、

Lance 1188

LeetCode题目解析(二):10、Regular Expression Matching

10、正则表达式匹配一、问题描述: 实现一个支持’.’和’*’的正则表达式匹配算法。其中’.’可以匹配任意字符,’*’可以使其前面的字符匹配一个或多个。匹配应当覆盖整个字符串而不是部分。 给出的函数原型为bool isMatch(const char *s, const char *p) 例如: isMatch(“aa”,”a”) → false isMatch(“aa”,”aa”) →

Kiritoku的博客 515

WPF MVVM实战:构建可绑定的RichTextBox富文本编辑器

本文详细介绍了如何在WPF MVVM模式下构建可绑定的RichTextBox富文本编辑器,解决标准RichTextBox.Document属性不支持数据绑定的问题。通过创建自定义BindableRichTextBox控件,实现FlowDocument的绑定支持,并分享插入图片、文本格式控制等实战技巧,帮助开发者高效开发富文本编辑功能。

weixin_33717117的博客 306

leetcode 10. 正则表达式匹配

【代码】leetcode 10. 正则表达式匹配。

weixin_45524582的博客 471

笔记汇总 | 斯坦福 CS229 机器学习

本文为斯坦福大学 2014 秋季 CS229 机器学习课程学习笔记本文主体部分转载自黄海广博士,文末已给出,大家有兴趣可以直接访问笔记首页,下载对应课程资料及作业代码。

ReturnTmp的博客 2463

关于StartAI本地部署相关问题解答

很多小伙伴们都有接入自己本地SD的需求,对此小编整理了一些相关问题~

HDJ9387的博客 940

leetcode第10题——***Regular Expression Matching

题目 Implement regular expression matching with support for '.' and '*'. '.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire

buptlrw的专栏 2604

利用ENVI处理TIF文件,把多个tif整合到一个完整的tif,例如2003-2011年的tif整合到一个tif上。

利用ENVI处理TIF文件,把多个tif整合到一个完整的tif,例如2003-2011年的tif整合到一个tif上。

unique_sir的博客 1万+

leetcode题解:第10题Regular Expression Matching

https://leetcode-cn.com/problems/regular-expression-matching/ 分析 这道题的难点在于存在a*这样的组合,如何处理与这种组合匹配的字符数是很棘手的问题,例如: s = "aaa", p = "aa*" s = "baaa", p = "ba*" 第一个例子中a*匹配2个字符,第二个例子中a*匹配3个字符。可以看出,匹配的字符数不仅与s有关,还与p中组合前面的字符有关(后面也有可能)。如果是.*这样的组合,会更加麻烦。 我一开始的想法是用双指针分别

chenf1999的博客 313

http协议

HTTP 协议由起始行、头部、空行、消息体组成。

qq_34059233的博客 89

046篇:数据统计:分组、求和、平均值、最大最小值

本文介绍了在RPA中实现数据分组统计的方法。通过字典+循环组合,可以完成按单字段或多字段的分组聚合操作,包括求和、计数、求平均值及最大/最小值等。文章详细讲解了分组统计的原理,并提供了单级分组、多级分组的具体实现步骤,最后通过销售数据按月分组的实战案例,演示了如何从原始数据到生成汇总报表的完整流程。这些方法可以灵活应用于各类数据统计分析场景。

weixin_59649563的博客 214

Leetcode: Regular Expression Matching

Implement regular expression matching with support for '.' and '*'. '.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire input st

ZkvIA的博客 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LeetCode(Regular Expression Matching & Wildcard Matching)

【代码】LeetCode(Regular Expression Matching & Wildcard Matching)

Jiajun Zhu 277

jre9下载 jdk9

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

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

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

leetcode10 Regular Expression Matching @python

leetcode里一道hard难度的题(第10题), 题主已经栽死在里面,借鉴了别人优秀的思想用python实现了,经典的东西要保留。 感谢@Vosky

nadizhong4136的博客 406

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

leetcode 第10题 Regular Expression Matching

周末也没有做leetcode,感觉有点罪恶啊,这个第10题好难啊,涉及到递归了,看的我是头晕眼花啊。我看着看着还是有点收获的,我发现题目仍然没有我想象中的那么的简单,如果s = 'a b c d e',p = '. * e',这样匹配出的结果也是正确的,我就很纳闷儿啊,' . '是匹配任意一个字符,可是我以为只能匹配一个字符,但是从这个算例上看,当它和' * '在一起时,' . '可以多次匹配不同

paofuhemakalong的博客 988

【Leetcode】10. Regular Expression Matching

考虑初始条件,空字符串可以和空模式匹配,而非空字符串无法和空模式匹配,所以。不合法,我们也应该返回false。一下子是看不出来的,需要在递推的过程中算出来。,只是为了将不合法的情形包含进去);出现,也就是那个整体匹配的一部分是。末字符匹配完之后,前面有可能还有。是个合法的模式串,应该有如果。如果这个整体按照出现大于等于。,这个整体匹配完之后,还需要。,因为那个整体是匹配大于等于。可以匹配其之前的字符重复。次来匹配,那么就要求或者。可以匹配任何单个字符,次来匹配,那么结果就是。如果这个整体按照出现。

数学、算法爱好者的博客 357

leetcode 10: Regular Expression Matching

Regular Expression Matching Total Accepted: 39732 Total Submissions: 192279 Implement regular expression matching with support for '.' and '*'. '.' Matches any single character. '*' Mat

西施豆腐渣 2803

【LeetCode】10.Regular Expression Matching(Python)

Problem LeetCode 10: 正则表达式匹配 难度:hard 给定输入字符串和模式(P),实现与“.”和“”支持匹配的正则表达式。 “.”匹配任何单个字符。 “”与前面的单个元素零个或多个匹配。 匹配应该覆盖整个输入字符串(而不是部分)。 注: s可以为空,并且只包含小写字母a-z。 p可以为空,只包含小写字母a-z和类似的字符。或者*。 例1: 输入:S=“AA”, P=“A” 输出...

E.W的博客 1450

10. Regular Expression Matching 正则表达式匹配

题目:Regular Expression Matching 正则表达式匹配 难度:困难 Given an input string (s) and a pattern (p), implement regular expression matching with support for'.'and'*'. '.' Matches any single character. '*' ...

qq_21963133的博客 550

LeetCode Regular Expression Matching

Implement regular expression matching with support for '.' and '*'.'.' Matches any single character.'*' Matches zero or more of the preceding element.The matching should cover the entire input string

Coding for Dreams 2599

leetcode 10: Regular Expression Matching 分析及解答

解读: •‘.'代表一个任意字符,与其附近的字符无关 •’*‘代表o个或者多个前面的字符,该字符影响前面字符的“存在”,例如:a*={ε,a,aa,aaa,…},即当"*"表示0个前面的字符时,该字符串为空串ε。 分析:题目要求匹配整个输入字符串,即完全匹配,分如下情况: 1.同时为空则true p为ε时,s为ε则匹配 s为ε时,p为ε则匹配,但此时p分两种情况: 1、p确实为ε 2、p为”a*“类型,此时*代表前面的字符存在0次,则p在匹配意义上位ε 2.不同时为空就需要比较 •p字符串中当前字

若有所思HS 1736

leetcode 10 Regular Expression Matching

题目地址及大意 回溯法 动态规划方法 题目地址及大意题目leetcode 10 Regular Expression Matching大意如下:给定两个字符串,s 与 p,其中 p 有可能包含 . 和 * 两种元素。其中, . 可以代表任何一个字符, * 代表它前面的字符重复 0 次或者更多次。 即 a* 可以代表 空字符, 只含有一个a,含有两个a……题目刚开始看的时候我连题意都没有很理解,以

Alice lr的博客 388

【todo+低频题】LeetCode 10. Regular Expression Matching

LeetCode 10. Regular Expression Matching 本博客参考:http://www.cnblogs.com/grandyang/p/4461713.html 详细解析见另一题:【重点】剑指offer——面试题53:正则表达式匹配里面的代码风格是C的,现在把它改成C++风格的代码。在剑指offer53题的代码中,由于代码风格的原因,未考虑p.size() == 1...

Allenlzcoder的博客 1301

LeetCode 10: Regular Expression Matching

Implement regular expression matching with support for '.' and '*'. '.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire inpu

哈哈的个人专栏 2717

LeetCode 10. Regular Expression Matching

题目 分析 一道开始去想确实hard的题目,原因就在于*这个情况把题目给复杂化了,没关系,一步一步,庖丁解牛。 这题主流的两种做法就是递归和dp,其实这题递归来写我感觉并不比dp轻松,原因都是需要考虑比较多的情况。这里先来记录dp的做法,等以后有机会再补上递归写法。 dp无非就是考虑边界和一般情况,这种双字符串比较的dp一般都是开二维数组dp[][]。为了方便考虑到空串的情况,dp[i][j]的...

Teee 298
上一篇: LeetCode题目:9.Palindrome Number
下一篇: LeetCode题目:23. Merge k Sorted Lists
MyCodecOdecoDecodE
博客等级 码龄10年 66粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值