当前位置: 首页 > article >正文

LeeCode题库第十题

10.正则表达式匹配 

项目场景:

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

  • '.' 匹配任意单个字符
  • '*' 匹配零个或多个前面的那一个元素

所谓匹配,是要涵盖 整个 字符串 s 的,而不是部分字符串。

 

示例 1:

输入:s = "aa", p = "a"
输出:false
解释:"a" 无法匹配 "aa" 整个字符串。

示例 2:

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

示例 3:

输入:s = "ab", p = ".*"
输出:true
解释:".*" 表示可匹配零个或多个('*')任意字符('.')。

提示:

  • 1 <= s.length <= 20
  • 1 <= p.length <= 20
  • s 只包含从 a-z 的小写字母。
  • p 只包含从 a-z 的小写字母,以及字符 . 和 *
  • 保证每次出现字符 * 时,前面都匹配到有效的字符


问题描述

        dp[i][j] 表示 s 的前 i 个字符和 p 的前 j 个字符是否匹配。代码首先初始化 dp[0][0] = True,表示空字符串和空模式匹配,然后处理模式 p 中 * 的情况,确保可以匹配空字符串。接着通过状态转移填充动态规划表:如果 p[j-1] 是 *,则考虑忽略 * 及其前面的字符,或者匹配 s[i-1] 与 * 前面的字符;如果 p[j-1] 不是 *,则直接匹配 s[i-1] 和 p[j-1] 或 .。最终,dp[-1][-1] 表示整个字符串 s 和模式 p 是否匹配。 

class Solution:
    def isMatch(self, s: str, p: str) -> bool:
        m,n=len(s)+1,len(p)+1
        dp=[[False]*n for _ in range(m)]
        dp[0][0]=True
        for j in range(2,n,2):
            dp[0][j]=dp[0][j-2] and p[j-1]=='*'
        for i in range(1,m):
            for j in range(1,n):
                if p[j-1]=='*':
                    if dp[i][j-2]:dp[i][j]=True
                    elif dp[i-1][j] and s[i-1]==p[j-2]:dp[i][j]=True
                    elif dp[i-1][j] and p[j-2]=='.':dp[i][j]=True
                else:
                    if dp[i-1][j-1] and s[i-1]==p[j-1] :dp[i][j]=True
                    elif dp[i-1][j-1] and p[j-1]=='.':dp[i][j]=True
        return dp[-1][-1]



        
        

        本题提交情况。

 

         以上为本篇文章的全部内容,感谢你抽出宝贵的时间阅读这篇文章。如果你有任何疑问或建议,欢迎在评论区留言,我们一起交流进步。愿你的代码之路越走越顺,生活充满阳光!  


http://www.kler.cn/a/547415.html

相关文章:

  • DeepSeek-R1论文阅读及本地调用
  • A003基于SpringBoot实现的社团管理系统
  • Java 设计模式之桥接模式
  • 传输层协议TCP ( 下 )
  • 一文说清楚什么是Token以及项目中使用Token延伸的问题
  • 【java面向对象的三大特性】封装、继承和多态
  • 【愚公系列】《Python网络爬虫从入门到精通》012-字符串处理
  • 为AI聊天工具添加一个知识系统 之103 详细设计之44 自性三藏 之4 祖传代码 之2
  • 网络安全扫IP工具
  • Java 语法糖:让开发更丝滑的“幕后操作”
  • DeepSeek 助力 Vue 开发:打造丝滑的侧边栏(Sidebar)
  • 【vscode】VScode Remote SSH配置
  • 卷积神经网络实战人脸检测与识别
  • Docker安装分布式vLLM
  • day3 改bug
  • CF91B Queue
  • DevOps与自动化部署全解析:从理论到实战
  • SwiftUI 5.0 中宝藏视图修改器 containerRelativeFrame 趣谈(下)
  • 工业相机选型五要素
  • 不需要移植和配置xinetd 等相类似执行文件,tftp-hpa服务器交叉移植使用说明