题目:正则表达式匹配

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

示例 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
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。

解题:

  • 使用dp
  • dp[i][j]表示s的前i个字符和p的前j个字符是否匹配。
  • 刚开始的初始化,尤其是dp[0][m]的数值
class Solution {
public:bool isMatch(string s, string p) {int l1 = s.size(),l2 = p.size();vector<vector<bool> > dp(l1 + 1,vector<bool>(l2 + 1,false));dp[0][0] = true;for(int j = 1;j <= l2;j++){if(p[j - 1] == '*' && j - 2 >= 0) dp[0][j] = dp[0][j - 2];}for(int i = 1;i <= l1;i++){for(int j = 1;j <= l2;j++){if(p[j - 1] == s[i - 1] || p[j - 1] == '.'){dp[i][j] = dp[i - 1][j - 1];}else if(p[j - 1] == '*'){if(p[j - 2] == s[i - 1] || p[j - 2] == '.')dp[i][j] = (dp[i - 1][j] || dp[i][j - 2]);elsedp[i][j] = dp[i][j - 2];}}}return dp[l1][l2];}
};

剑指offer:面试题19. 正则表达式匹配相关推荐

  1. 剑指offe面试题19——正则表达式匹配

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

  2. 【递归】剑指offer——面试题19:二叉树的镜像

    剑指offer--面试题19:二叉树的镜像 Solution1: 递归解法,牢记! 根结点为空的情况容易漏,注意! /* struct TreeNode {int val;struct TreeNod ...

  3. [剑指offer]面试题19:二叉树的镜像

    面试题19:二叉树的镜像 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. 二叉树结点的定义如下: struct BinaryTreeNode {int value;BinaryTreeNo ...

  4. 剑指offer面试题[19]-二叉树的镜像

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8/ \6 10/ \ / \5 7 9 11镜像二叉树8/ \10 6/ \ / \11 9 7 5 ...

  5. python正则表达式面试_【剑指offer】面试题19. 正则表达式匹配

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

  6. 【重点】剑指offer——面试题53:正则表达式匹配

    剑指offer--面试题53:正则表达式匹配 这个属于不是那么好做的题目之一...参考网址:https://www.nowcoder.com/profile/3639006/codeBookDetai ...

  7. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  8. 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字

    今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...

  9. 【剑指Offer面试题】 九度OJ1510:替换空格

    c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...

  10. [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]

    [问题描述][中等] 235/68-1 搜索二叉树 236/68-2 二叉树 [解答思路] 递归 时间复杂度:O(N) 空间复杂度:O(N) 情况 1. , 2. , 3. , 4. 的展开写法如下. ...

最新文章

  1. 哔哩哔哩软测三面,面试题复盘
  2. Linux系统Sudo基本用法
  3. 干货!各国圣诞放假时刻表!
  4. 不同网段通过静态路由实现互通,华为S5700交换机开启SSH远程指定IP登陆配置(强烈推荐)
  5. 解决 transaction-manager Attribute transaction-manager is not allowed here
  6. php如何防止图片盗用/盗链的两种方法(转)
  7. 读书笔记_量化交易如何建立自己的算法交易04
  8. 10. Browser 对象 - Location 对象(2)
  9. Xenu-死链接检测工具
  10. Linux下线程经典问题(生产者消费者问题,哲学家问题...)
  11. 使用netron对mnist网络结构分析
  12. 计算机如何快速切换窗口,如何快速切换电脑页面
  13. SpringBoot Web开发
  14. 苹果手机电池恢复方法_recover恢复实用教程:苹果手机恢复误删照片的几种方法...
  15. 如何设置浏览器信任局域网的网站证书
  16. Java处理Excel文件工具包-easyexcel使用详解
  17. js中 0 +0 -0 有什么区别?
  18. php++ui设计课程,UI设计主要学什么?
  19. Python官网主页改版 http://www.python.org/
  20. 写技术文章也挺好的,虽然没有多少人看

热门文章

  1. 写代码:使用while循环实现输出1,2,3,4,5,7,8,9,11,12
  2. BZOJ.3527.[ZJOI2014]力(FFT)
  3. GDOI2018记录
  4. 代码管理和版本管理的作业流程以及规范是怎样的?
  5. RabbitMQ 入门系列(5)— RabbitMQ 使用场景优缺点
  6. GitLab安装说明
  7. 遥控车_vijos1458_纪中1724_水
  8. 事件绑定在IE下this是window的问题
  9. 《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...
  10. SSD(Single shot multibox detector)目标检测模型架构和设计细节分析