手撕LeetCode困难题-------正则表达式匹配 Python实现

2023-10-27

昨天刚刚把Python正则表达式学完,今天必须立刻手撕一道相关LeetCode。这不,题目马上来了~

题面:正则表达式匹配

给你一个字符串 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 <= 30
s 只包含从 a-z 的小写字母。
p 只包含从 a-z 的小写字母,以及字符 . 和 *。
保证每次出现字符 * 时,前面都匹配到有效的字符

思路:

  • 首先,看到题目要求输入的字符串只包括 a - z 的小写字母,我想到了最近刚学过的ord()方法, (想要了解的朋友们点此链接详细了解) 将输入的字符转化成ASCII码进行判断,如果不是就返回False,是则进行下一步判断。
  • 其次在对正则表达式p的处理上,同样也用了ord(),然后就是加入了一个判断,p[i] == ‘*’ and p[i-1] != ‘’,若出现’ * ',判断它前面的字符是否为空,将符合条件的字符全部加入ans里用于后续正则的判断。
  • 接下来就是正则表达式的传入,用了re.compile和re.findall两个方法,(了解正则表达式的六大方法可点击此链接),compile将字符串编译成正则表达式传给pattern,findall匹配s、p将结果传给result .
  • 题目要求最后的结果必须和原字符串相同,而由于findall返回的对象是一个列表,不能直接比较,所以我们用 if s in result 来判断。不得不说,Python在字符串方面真的是有得天独厚的优势!!
  • 最后,如果在里面,return True ,不在就返回 False ,此题就算解决啦!是不是很简单~

代码实现(Python):测试

import re
s = input("请输入一个字符串:")
p = input("请输入字符规律:")
ans = ''
temp = 1
for i in range (len(p)):
    if 97 <= ord(p[i]) <= 122 or p[i]== '.':
        ans += p[i]
    elif  p[i] == '*' and p[i-1] != '':
        ans += p[i]
        print(ans)
    else:
        temp = 0
if temp == 1:
    pattern = re.compile(ans)
    result = re.findall(pattern,s)
    print(result)
    if s in result :
        print("ok")
    else:print("no")
else: print("no")

代码实现(Python):LeetCode

class Solution(object):
    def isMatch(self, s, p):
        """
        :type s: str
        :type p: str
        :rtype: bool
        """
        import re
        ans = ''
        temp = 1
        for i in range (len(p)):
            if 97 <= ord(p[i]) <= 122 or p[i]== '.':
                ans += p[i]
            elif  p[i] == '*' and p[i-1] != '':
                ans += p[i]
            else:
                temp = 0
        if temp == 1:
            pattern = re.compile(ans)
            result = re.findall(pattern,s)
            if s in result :
                return True
            else:return False
        else: return False
                

到这里就结束了哦,kk在此感谢您的浏览~

追风赶月莫回头,平芜尽处是春山。少年加油!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手撕LeetCode困难题-------正则表达式匹配 Python实现 的相关文章

随机推荐

  • 页式存储,段式存储,段页式存储,引入快表等访存次数

    王道的说法 页式存储 2次 第一次 访问内存中的页表 利用逻辑地址中的页号查找到页帧号 与逻辑地址中的页内偏移拼接形成物理地址 第二次 得到物理地址后 再一次访问内存 存取指令或者数据 段式存储 2次 同上 段页式存储 3次 第一次 访问内
  • 【译】Rust 实现一个 DNS 客户端,我从中学到什么

    What I learned from making a DNS client in Rust 译文 Rust 实现一个 DNS 客户端 我从中学到什么 原文链接 https blog adamchalmers com making a d
  • 大津算法的matlab实现

    大津算法详解 一 算法功能 图像分割就是把图像分成若干个特定的 具有独特性质的区域并提出感兴趣目标的技术和过程 它是由图像处理到图像分析的关键步骤 大津算法也称最大类间差法 由大津于1979年提出 被认为是图像分割中阈值选取的最佳算法 计算
  • 用开卡工具重生SSD,SM2246XT一步一步开卡成功教程

    故障现象 不能进系统 用U盘从PE进入 过程很慢 卡住 进不了PE 直接拆下硬盘 用硬盘盒连接电脑 能识别 发现C盘还已经标红 D盘正常 还不错 文件都在 直接拷贝出来 接下来就是对他直接格式化 这里出现了问题 无论是用PE的还是windo
  • 前端知识题整理第二期

    1 js中的闭包指什么 有权访问另一个函数作用域中的变量的函数 创建闭包的常见方式 就是一个函数内部创建另一个函数 2 v if和v show的区别是什么 v if是动态的向DOM树内添加或删除DOM元素 v show本质是标签displa
  • STM32 硬件IIC 控制OLED I2C卡死问题

    更新通知 2023 09 06 STM32L151 固件库 使用I2C 太难了 又宕机了 建议不要在固件库版本上尝试硬件IIC 了 一般人真用不了 直接使用软件模拟的 或者不要使用固件库了 用HAL 库吧 据说HAL 库没这么多问题 不死心
  • 【深度学习与计算机视觉】13、深度学习中的目标检测视频笔记

    文章目录 一 目标检测是什么 二 RCNN 三 SPPnet 四 Fast R CNN 五 Faster R CNN 六 R FCN 七 YOLO v1 八 YOLO v2 九 YOLO v3 一 目标检测是什么 最小外接矩形 也就是最后要
  • 【RocketMQ】消息拉模式分析

    RocketMQ有两种获取消息的方式 分别为推模式和拉模式 推模式 推模式在 RocketMQ 消息的拉取一文中已经讲过 虽然从名字上看起来是消息到达Broker后推送给消费者 实际上还是需要消费向Broker发送拉取请求获取消息内容 推模
  • Redis持久化之RDB与AOF详解

    RDB和AOF机制 简介 RDB和AOF是redis数据持久化的两种机制 当然实际场景下还会使用这两种的混合模式 为了防止数据丢失以及服务重启时能够恢复数据 为什么需要持久化 Redis是个基于内存的数据库 服务器一旦宕机 内存中的数据将全
  • 排序链表

    1 链表快排 p gt q之间放着小于pivot的节点 q gt next tail之间放着大于pivot的节点 class Solution public ListNode sortList ListNode head quickSort
  • 在配置文件“e:/HB/my-project/tsconfig.json”中找不到任何输入。指定的 “include“ 路径为“[“**/*“]”,“exclude“ 路径为“[]”。

    问题展示 问题原因 你没有 ts 文件 却写了 ts文件的配置 vscode 检验不通过 解决方法 随便找个地方新建一个 ts 文件即可 我就在项目根目录中新建一个 ts 文件
  • D4RL的踩坑记录

    D4RL 的env get normalized score 在调用d4rl的库函数时用了env get normalized score 这里遇到的问题是 env has no attribute get normalized score
  • 旋转矩阵(Rotate Matrix)的性质分析

    学过矩阵理论或者线性代数的肯定知道正交矩阵 orthogonal matrix 是一个非常好的矩阵 为什么这么说 原因有一下几点 正交矩阵每一列都是单位矩阵 并且两两正交 最简单的正交矩阵就是单位阵 正交矩阵的逆 inverse 等于正交矩
  • html效果浮窗效果,网页浮窗成效

    当前位置 我的异常网 Web前端 网页浮窗成效 网页浮窗成效 www myexceptions net 网友分享于 2014 12 05 浏览 0次 网页浮窗效果Fixed固定位置的悬浮 font size 12px font family
  • Bad file descriptor (C:\ci\zeromq_1616055400030\work\src\epoll.cpp:100)

    问题描述 这个报错总是出现在使用conda 环境安装一些新包后 再登录jupyter notebook就报此错误 导致jupyter notebook 无法使用 解决 1 pip uninstall pyzmq 2 pip install
  • TP5整合的阿里云短信接口

    现阶段 短信的应用主要就是用来验证下手机号是不是正常的手机号 只要涉及到用户手机号的问题的时候 都会做短信验证码来验证下改手机号是否是正常手机号 接下来就是操作步骤 首先要在阿里云账号上开通短信功能 然后再设置自己的签名 和短信模板 先导入
  • ElementUi Upload上传组件调接口时踩坑(FormData传参)

    使用自定义Upload上传实现 参数 http request 意为 覆盖默认的上传行为 可以自定义上传的实现 是个function 使用Upload组件 因为饿了么提供的几种上传交互都不满足我们的业务 所以我需要自定义交互 先看一下代码里
  • Spring利用propertyConfigurer类 读取.property数据库配置文件

    1 Spring的框架中 org springframework beans factory config PropertyPlaceholderConfigurer类可以将 properties key value形式 文件中 一些动态设
  • 2023蓝桥杯Java研究生组赛题

    蓝桥杯Java研究生组 JavaA组看过来 这两个组别题目基本一样 第一次参加了Java研究生组 Java组应该没有C C 那么卷吧 前面几题感觉难度还行没有特别难 后面几个大题依旧是没法做 不知道多少分能拿省一 有参加过的大佬可以说一说吗
  • 手撕LeetCode困难题-------正则表达式匹配 Python实现

    昨天刚刚把Python正则表达式学完 今天必须立刻手撕一道相关LeetCode 这不 题目马上来了 题面 正则表达式匹配 给你一个字符串 s 和一个字符规律 p 请你来实现一个支持 和 的正则表达式匹配 匹配任意单个字符 匹配零个或多个前面