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)相关推荐

  1. 剑指OFFER——正则表达式匹配

    请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例如,字 ...

  2. 剑指offer有python版吗_剑指Offer算法类题目[Python版]

    标签:重复   作用   coding   面试   medium   mba   none   fas   utf-8 面试题012 数值的整数次方 解题思路1 考虑所有情况,循环连乘 代码: de ...

  3. 剑指Offer 66题 python版本 汇总

    牛客网剑指offer 66题汇总 (python) 有部分参考牛客网答案,部分为自己提交结果 1. 二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每 ...

  4. 【剑指offer】——【python中return函数中的and和or表达式的返回值】

    目录 1.# and 结果为真,返回最后一个表达式的结果,若结果为假返回第一个为假的表达式的结果 2.# or 结果为真,返回第一个为真的表达式的结果,若结果为假,返回最后一个表达式的结果 3.应用[ ...

  5. 剑指offer 答案 python_【剑指offer】【python】面试题2~5

    使用python实现<剑指offer>面试题ヾ(◍°∇°◍)ノ゙,以此记录. 2_实现Singleton模式 题目:实现单例模式 单例模式,是一种常用的软件设计模式.在它的核心结构中只包含 ...

  6. 剑指Offer题解(Python版)

    https://blog.csdn.net/tinkle181129/article/details/79326023# 二叉树的镜像     链表中环的入口结点     删除链表中重复的结点     ...

  7. 剑指offer全书题解 (Python)【更新完毕】

    文章目录 2 实现 Singleton 模式 3 找出数组中重复的数字 3.2 不修改数组找出重复的数字 4 二维数组中的查找 5 替换空格 6 从尾到头打印链表 7 重建二叉树 8 二叉树的下一个节 ...

  8. 剑指offer 手刷python 汇总整理版本~

    文章目录 0.递归&脑力 斐波那契数列 数值的n次方 二分法和牛顿迭代法求平方根 丑数 正则表达式匹配 [LeetCode#42. Trapping Rain Water 收集雨水](http ...

  9. 剑指Offer_52_正则表达式匹配

    题目描述 请实现一个函数用来匹配包括'.'和''的正则表达式.模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例 ...

  10. 剑指offer 重建二叉树 python

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 样例 输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4, ...

最新文章

  1. 循环神经网络(RNN)原理通俗解释
  2. Redis 基数统计:HyperLogLog 小内存大用处
  3. Vue.js 学习视频和书籍【推荐】
  4. 2008年浙江大学计算机及软件工程研究生机试真题
  5. 未来数据中心的五大“走心”创新
  6. 『设计模式』我就要一个对象,你别给我这么多好不好!---单例模式
  7. pytorch1.7教程实验——分类器训练
  8. 今日新出!旷视提出One-Shot模型搜索框架的新变体
  9. 从零开始学Pytorch(三)之多层感知机的实现
  10. python数据类型-元组(tuple)
  11. 英特尔、高通等禁止员工与华为私下交流
  12. linux入门常用命令
  13. 电脑网速,别把宽带浪费了,一招提升电脑网速
  14. 抖音网红怎么赚钱了?通过一百行代码批量下载抖音视频!找到窍门!
  15. 2022-2028年中国旅游演艺行业市场现状分析及发展前景展望报告
  16. MindManager2018,修改下载时间
  17. postgresql 优势
  18. Laravel 中使用 Laravel-Excel 美化
  19. Google Open Images Dataset V4 百度网盘地址。
  20. 前端xlsx插件简单说明

热门文章

  1. 死锁编码及定位分析(故障排查)
  2. 【CodeForces - 674B 】Bear and Two Paths(贪心,思维,水题)
  3. Apollo进阶课程㊸丨Apollo实战——障碍物感知和路径规划能力实战
  4. 10.深度学习练习:Convolutional Neural Networks: Step by Step(强烈推荐)
  5. 无法设置html过渡效果,html – CSS3过渡显示无阻止过度滚动
  6. html验证邮箱自动,html5+JavaScript进行邮箱地址验证
  7. 向量数量积公式_多法 | 向量数量积相关最值问题的常见处理方法
  8. 使用字符串切割,使手机号中间四位隐藏
  9. 【算法系列之九】合并两个有序数组
  10. Event Recommendation Engine Challenge(基础版)---代码