剑指Offer-正则表达式匹配(Python)
1 题干内容
请实现一个函数用来匹配包括.和*的正则表达式。模式中的字符.表示任意一个字符,而*表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。 例如,字符串aaa与模式a.a和ab*ac*a匹配,但是与aa.a和ab*a均不匹配。
2 题意解析
"匹配"是指完全匹配,即aaa与aaaa不匹配,只有aaa与aaa才能说是匹配。 b*可以理解是''"也可以是"bbbbbb*",例如ab*ac*a可以理解为"aaa",也可以理解为"abaa"或者"abaca"。
3 解题思路
字符串:strA, 模式串patternB (1)patternB[j+1] != '*' 当strA[i] == patternB[j]或者patternB[j] == '.' and i < len(strA) 如果strA[i+1] != patternB[j+1], 返回False 如果strA[i+1] == patternB[j+1],进行下一轮比较 当strA[i] != patternB[j] and patternB[j] != '.' 直接返回Flase (2)patternB[j+1] == '*' 当strA[i] == patternB[j]或者patternB[j] == '.' and i < len(strA) 1)i不变,模式串 j = j + 2 2)j不变,字符串 i = i + 1 3)i = i+ 1, j = j + 2 当strA[i] != patternB[j] and patternB[j] != '.' 1)i不变,模式串 j = j + 2
4 具体代码
def matchReg(strA: str, patternB: str, i: int = 0, j: int = 0) -> bool:if i == len(strA) and j == len(patternB): # 完全匹配return Trueif i < len(strA) and j == len(patternB) or (i == len(strA) and j < len(patternB)):return Falseif (j+1) < len(patternB) and patternB[j+1] == '*':if (patternB[j] == '.' and i < len(strA)) or (strA[i] == patternB[j]):return matchReg(strA, patternB, i, j + 2) or matchReg(strA, patternB, i + 1, j) or matchReg(strA, patternB, i + 1, j + 2)else:return matchReg(strA, patternB, i, j + 2)if (patternB[j] == '.' and i < len(strA)) or (strA[i] == patternB[j]):return matchReg(strA, patternB, i + 1, j + 1)return False
GitHub链接:https://github.com/miaomiaoqiushui/Algorithm/blob/master/1_%E5%89%91%E6%8C%87Offer/53_%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8C%B9%E9%85%8D.ipynb
转载于:https://www.cnblogs.com/liuzhen1995/p/10799234.html
剑指Offer-正则表达式匹配(Python)相关推荐
- 剑指OFFER——正则表达式匹配
请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例如,字 ...
- 剑指offer有python版吗_剑指Offer算法类题目[Python版]
标签:重复 作用 coding 面试 medium mba none fas utf-8 面试题012 数值的整数次方 解题思路1 考虑所有情况,循环连乘 代码: de ...
- 剑指Offer 66题 python版本 汇总
牛客网剑指offer 66题汇总 (python) 有部分参考牛客网答案,部分为自己提交结果 1. 二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每 ...
- 【剑指offer】——【python中return函数中的and和or表达式的返回值】
目录 1.# and 结果为真,返回最后一个表达式的结果,若结果为假返回第一个为假的表达式的结果 2.# or 结果为真,返回第一个为真的表达式的结果,若结果为假,返回最后一个表达式的结果 3.应用[ ...
- 剑指offer 答案 python_【剑指offer】【python】面试题2~5
使用python实现<剑指offer>面试题ヾ(◍°∇°◍)ノ゙,以此记录. 2_实现Singleton模式 题目:实现单例模式 单例模式,是一种常用的软件设计模式.在它的核心结构中只包含 ...
- 剑指Offer题解(Python版)
https://blog.csdn.net/tinkle181129/article/details/79326023# 二叉树的镜像 链表中环的入口结点 删除链表中重复的结点 ...
- 剑指offer全书题解 (Python)【更新完毕】
文章目录 2 实现 Singleton 模式 3 找出数组中重复的数字 3.2 不修改数组找出重复的数字 4 二维数组中的查找 5 替换空格 6 从尾到头打印链表 7 重建二叉树 8 二叉树的下一个节 ...
- 剑指offer 手刷python 汇总整理版本~
文章目录 0.递归&脑力 斐波那契数列 数值的n次方 二分法和牛顿迭代法求平方根 丑数 正则表达式匹配 [LeetCode#42. Trapping Rain Water 收集雨水](http ...
- 剑指Offer_52_正则表达式匹配
题目描述 请实现一个函数用来匹配包括'.'和''的正则表达式.模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例 ...
- 剑指offer 重建二叉树 python
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 样例 输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4, ...
最新文章
- 循环神经网络(RNN)原理通俗解释
- Redis 基数统计:HyperLogLog 小内存大用处
- Vue.js 学习视频和书籍【推荐】
- 2008年浙江大学计算机及软件工程研究生机试真题
- 未来数据中心的五大“走心”创新
- 『设计模式』我就要一个对象,你别给我这么多好不好!---单例模式
- pytorch1.7教程实验——分类器训练
- 今日新出!旷视提出One-Shot模型搜索框架的新变体
- 从零开始学Pytorch(三)之多层感知机的实现
- python数据类型-元组(tuple)
- 英特尔、高通等禁止员工与华为私下交流
- linux入门常用命令
- 电脑网速,别把宽带浪费了,一招提升电脑网速
- 抖音网红怎么赚钱了?通过一百行代码批量下载抖音视频!找到窍门!
- 2022-2028年中国旅游演艺行业市场现状分析及发展前景展望报告
- MindManager2018,修改下载时间
- postgresql 优势
- Laravel 中使用 Laravel-Excel 美化
- Google Open Images Dataset V4 百度网盘地址。
- 前端xlsx插件简单说明
热门文章
- 死锁编码及定位分析(故障排查)
- 【CodeForces - 674B 】Bear and Two Paths(贪心,思维,水题)
- Apollo进阶课程㊸丨Apollo实战——障碍物感知和路径规划能力实战
- 10.深度学习练习:Convolutional Neural Networks: Step by Step(强烈推荐)
- 无法设置html过渡效果,html – CSS3过渡显示无阻止过度滚动
- html验证邮箱自动,html5+JavaScript进行邮箱地址验证
- 向量数量积公式_多法 | 向量数量积相关最值问题的常见处理方法
- 使用字符串切割,使手机号中间四位隐藏
- 【算法系列之九】合并两个有序数组
- Event Recommendation Engine Challenge(基础版)---代码