文章目录

  • 1. 题目
  • 2. 解题
    • 2.1 递归
    • 2.2 DP

1. 题目

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

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

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

说明:
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。
示例 1:
输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。示例 2:
输入:
s = "aa"
p = "a*"
输出: true
解释: 因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。
因此,字符串 "aa" 可被视为 'a' 重复了一次。示例 3:
输入:
s = "ab"
p = ".*"
输出: true
解释: ".*" 表示可匹配零个或多个('*')任意字符('.')。示例 4:
输入:
s = "aab"
p = "c*a*b"
输出: true
解释: 因为 '*' 表示零个或多个,这里 'c' 为 0 个, 'a' 被重复一次。
因此可以匹配字符串 "aab"。示例 5:
输入:
s = "mississippi"
p = "mis*is*p*."
输出: false

《剑指Offer》同题:面试题19. 正则表达式匹配

2. 解题

类似题目:LeetCode 44. 通配符匹配(DP)

2.1 递归

  • p 不为空是可以取到 [1] 的,结尾 '\0'
class Solution {public:bool isMatch(string s, string p) {if(p.empty())return s.empty();if(p[1]=='*'){return isMatch(s, p.substr(2)) || ((!s.empty() && (s[0]==p[0] || p[0]=='.')) && isMatch(s.substr(1),p));}elsereturn (!s.empty() && (s[0]==p[0]||p[0]=='.')) && isMatch(s.substr(1),p.substr(1));}
};

268 ms 14.6 MB

2.2 DP

  • dp[i][j] 表示 s 前 i 个字符跟 p 前 j 个字符能够匹配(true/1)
class Solution {public:bool isMatch(string s, string p) {int m = s.size(), n = p.size(), i, j;vector<vector<int>> dp(m+1, vector<int>(n+1, false));dp[0][0] = true;//空串能够匹配for(i = 0; i <= m; ++i){for(j = 1; j <= n; ++j){if(p[j-1] == '*')//p第j个字符为*{dp[i][j] |= dp[i][j-2];//*匹配0次前面的字符if(match(s,p,i,j-1))//s第i个和p的第j-1个可以匹配, *匹配再多匹配一次i字符dp[i][j] |= dp[i-1][j];}else//p第j个字符不为*{if(match(s,p,i,j))//必须是i、j能够匹配dp[i][j] |= dp[i-1][j-1];}}}return dp[m][n];}bool match(string &s, string &p, int i, int j) {   //第i,j个字符能匹配return i>0 && (p[j-1]=='.' || p[j-1]==s[i-1]);}
};

4 ms 7 MB

python3 解答

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

100 ms 13.7 MB

LeetCode 10. 正则表达式匹配(递归/DP)相关推荐

  1. [动态规划] leetcode 10 正则表达式匹配

    [动态规划] leetcode 10 正则表达式匹配 1.题目 题目链接 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 ...

  2. Java实现 LeetCode 10 正则表达式匹配

    10. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配, ...

  3. LeetCode 10.正则表达式匹配(动态规划)

    题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '' 的正则表达式匹配. '.' 匹配任意单个字符 '' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字 ...

  4. leetcode 10 --- 正则表达式匹配

    1 题目 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 ...

  5. LeetCode 10 正则表达式匹配

    https://leetcode-cn.com/problems/regular-expression-matching/ 解决方案 class Solution {public boolean is ...

  6. LeetCode 44. 通配符匹配(DP)

    1. 题目 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配. '?' 可以匹配任何单个字符. '*' 可以匹配任意字符串(包括空字符串). 两个字符串 ...

  7. LeetCode精讲题 10正则表达式匹配(动态规划)

    标题 题目描述 递归(超时) 动态规划 结语 题目描述 先点赞再观看.帅哥靓女养成好习惯. 10 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和'*'的正则表达 ...

  8. LeetCode算法复健:10.正则表达式匹配

    10.正则表达式匹配 日期:2022/7/5 题目描述:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或 ...

  9. 【LeetCode】正则表达式匹配

    https://www.imooc.com/article/281353?block_id=tuijian_wz [LeetCode]正则表达式匹配 2019.03.04 19:53 598浏览 题目 ...

最新文章

  1. 惠斯通电桥信号调理芯片_用惠斯通电桥测电阻
  2. VS2019使用说明
  3. Golang 入门系列(九) 如何读取YAML,JSON,INI等配置文件...
  4. desk next the to_仁爱版七年级下册英语句型转换题型专练
  5. 正则表达式限制文本框只能输入数字,小数点,英文字母,汉字
  6. 使用 RequireJS 优化 Web 应用前端
  7. python pytest setupclass_简单了解pytest测试框架setup和tearDown
  8. scrapy模拟模拟点击_模拟大流行
  9. ruby 数据sql操作
  10. java面试第十七天
  11. 软件测试方法进行调优,性能测试调优过程
  12. 在GitHub里生成自己的网页
  13. Mac Duet使用教程
  14. macOS 应用程序dmg 已损坏无法打开解决办法
  15. JavaScript使用drag事件
  16. 安全帽检测/人脸识别系统国标GB28181协议云服务EasyGBS搭建智慧工地 助力智慧建筑生态圈
  17. SVN提交时出现remains in conflict错误
  18. 被谢耳朵一直嘲笑的MIT,这次发明了黑镜中的“恐怖机器”
  19. 怎么删除win10 C盘Hiberfil.sys文件,Hiberfil.sys文件删了有没有事?
  20. Linux远程联机服务(二)——Rsh服务器安装与使用详解

热门文章

  1. python 对象序列化 pickling_python操作文件——序列化pickling和JSON
  2. oracle 返回表的函数,oracle 返回表函数
  3. python 内置方法赋值_Python内置数据结构之字符串str
  4. c++远征之多态篇——异常处理
  5. 2018-2019-1 20165219 实验三 实时系统
  6. Python 如何调用 Java
  7. JS代码优化工具Prepack
  8. 01.轮播图之三 : collectionView 轮播
  9. win7(64位)php5.5-Apache2.4-mysql5.6环境安装
  10. 【NS2】在linux下安装低版本GGC