题目描述

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

解题思路

就是分两种情况,看表达式的下一个字符是不是'*'

  1. pattern下一个字符不为‘*’:这种情况比较简单,直接匹配当前字符。如果
    匹配成功,继续匹配下一个;如果匹配失败,直接返回false。注意这里的
    “匹配成功”,除了两个字符相同的情况外,还有一种情况,就是pattern的
    当前字符为‘.’,同时str的当前字符不为‘\0’。
  2. pattern下一个字符为‘*’时,稍微复杂一些,因为‘*’可以代表0个或多个。
    这里把这些情况都考虑到:

    • ‘*’匹配0个字符时,str当前字符不变,pattern当前字符后移两位,
      跳过这个‘*’符号;
    • ‘*’匹配1个或多个时,str当前字符移向下一个,pattern当前字符
      不变。(这里匹配1个或多个可以看成一种情况,因为:当匹配一个时,
      由于str移到了下一个字符,而pattern字符不变,就回到了上边的情况a;
      当匹配多于一个字符时,相当于从str的下一个字符继续开始匹配)

代码实现

class Solution {public:bool match(char* str, char* pattern){if(*str == '\0'&& *pattern == '\0')return true;if(*str != '\0' && *pattern == '\0')return false;//如果表达式的下一个字符不是*//正常处理//判断当前是否相等或者只要表达式为.并且匹配的字符串不为空//然后返回str+,pattern+1判断下一个if(*(pattern+1) != '*'){if(*str == *pattern || *str != '\0'&& *pattern == '.')return match(str+1,pattern+1);elsereturn false;}//否则下一个字符为'*'else{if(*str == *pattern || *str!= '\0' && *pattern == '.')return match(str,pattern+2)|| match(str+1,pattern);elsereturn match(str,pattern+2);}}
};

【剑指offer】_17正则表达式的匹配相关推荐

  1. 【LeetCode】剑指 Offer 19. 正则表达式匹配

    [LeetCode]剑指 Offer 19. 正则表达式匹配 文章目录 [LeetCode]剑指 Offer 19. 正则表达式匹配 package offer;public class Soluti ...

  2. 剑指 Offer 19. 正则表达式匹配 regex_match() regex()

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

  3. 剑指 Offer 19. 正则表达式匹配

    剑指 Offer 19. 正则表达式匹配 https://leetcode-cn.com/problems/zheng-ze-biao-da-shi-pi-pei-lcof/ 请实现一个函数用来匹配包 ...

  4. 剑指offer:正则表达式匹配

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

  5. 剑指offer之正则表达式匹配

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

  6. 【LeetCode笔记】剑指Offer 19. 正则表达式匹配(Java、动态规划)

    文章目录 题目描述 思路 && 代码 二刷 打卡第十二天- 题目描述 拖了超级久的一道题= =,懒得看正则表达式,但是其实和正则表达式相关的地方也不多 思路 && 代码 ...

  7. leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列

    剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...

  8. C#LeetCode刷题-剑指Offer

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-剑指Offer | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode剑指Offer ...

  9. 剑指offer (From Leetcode) 汇总

    剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知 ...

  10. 剑指Offer三天挑战赛16~32

    文章目录 剑指 Offer 16. 数值的整数次方 解 剑指 Offer 17. 打印从1到最大的n位数 解 剑指 Offer 18. 删除链表的节点 解 剑指 Offer 19. 正则表达式匹配 解 ...

最新文章

  1. 军用软件概算计价规范_超强干货分享:547建筑工程计量与计价,帮你轻松掌握计量与计价...
  2. 机器学习中为什么需要梯度下降_机器学习,梯度下降算法,问题引入
  3. 基于DataTabel的增删改查
  4. ajax实现highchart与数据库数据结合完整案例分析(三)---柱状折线图
  5. LeetCode 508. 出现次数最多的子树元素和(递归)
  6. ArcEngine中实现对符号的预览图输出
  7. acer 4741G安装ubuntu10.10显卡成功
  8. 激光SLAM导航系列(四)全局路径规划
  9. 骇客(Hacker)用语
  10. 爬虫小案例——爬取豆瓣电影《寄生虫》的短评
  11. 联想电脑 功能键切换正常键盘模式(简单)
  12. 【转】《与MySQL的零距离接触》第四章:操作数据表中的记录 (4-2:MySQL 插入记录INSERT)
  13. 三维几何 --- 计算几何模板
  14. [Linux]: 开机运行指定的命令/自动运行命令-Ubuntu亲测
  15. 使用IntelliJ IDEA创建Java项目
  16. 逛VeryCD 无意间看到来自JavaAmg77的总结性忠告 和大家分享一下
  17. 颜色混合BlendFunc用法实例总结
  18. CSS代码样式生成器工具网站
  19. android, 模拟器
  20. 一个90后博士眼中香港房奴梦:不吃不喝大干20年

热门文章

  1. .NET core2.0 发布至IIS中
  2. 如何监视ps/查询的性能和使用
  3. Jira filter subscribe issues
  4. window.onload事件
  5. 逗牙搞笑网www.idouya.xin
  6. ASP.NET知识集
  7. linux find prune排除某目录或文件
  8. [转]sql,N/$/#/@的含义和作用
  9. WCF中的方法重载 实现
  10. centos7服务器文件同步,centos7文件实时同步工具lsyncd