题目:10.RegularExpression Matching

Implement regular expression matching with support for'.' and '*'.

'.' Matches any single character.
'*' Matches zero or more of the preceding element.
The matching should cover the entire input string (not partial).
The function prototype should be:
bool isMatch(const char *s, const char *p)
Some examples:
        isMatch("aa","a") → false
        isMatch("aa","aa") → true
        isMatch("aaa","aa") → false
        isMatch("aa", "a*") → true
        isMatch("aa", ".*") → true
        isMatch("ab", ".*") → true
        isMatch("aab", "c*a*b") → true

题目大意:从p中找到可以匹配s的字符串,如果能找到则返回true,否则返回false

其中:

‘.’匹配任意的单个字符

'*'代表前一个字符重复0或若干次。

思路如下:

(1)*s字符串结束,要求*p也结束或者间隔‘*’则完成匹配;

(2)*s字符串未结束,而*p字符串结束,则无法匹配;

(3)s和p指向的字符串没有结束时,*(p+1)字符为'*',则*p字符可以匹配*s字符串中从0开始任意多个等于*p的字符,然后递归到*(s+i+1)字符串与*(p+2)字符串的比较;

(4)s和p指向的字符串没有结束时,*(p+1)字符不为'*',则只需比较*s字符与*p字符,若(相等或者*p==.)则递归到*(s+1)字符串与*(p+1)字符串的比较;

详细的代码如下:

class Solution {
public:bool isMatch(const char *s, const char *p) {//如果s结束了if (*s == 0){if (*p == 0 || (*(p + 1) == '*' && isMatch(s, p + 2)))return true;elsereturn false;}else if (*p == 0)//如果s没有结束p结束了return false;if (*(p + 1) != '*')//如果p+1不为*{if (*s == *p || *p == '.')return isMatch(s + 1, p + 1);//匹配下一个elsereturn false;}else{if (*s != *p && *p != '.'){return isMatch(s, p + 2);}else{if (isMatch(s, p + 2))return true;int i = 0;//*p字符可以匹配*s字符串中从0开始任意多个等于*p的元素while (*(s + i) == *p || *p == '.'){if (isMatch(s + i + 1, p + 2))return true;if (*(s + i + 1) == 0)break;i++;}return false;}}}
};

[Leetcode]10.RegularExpression Matching相关推荐

  1. 【重点 递归 动态规划 正则表达式匹配】LeetCode 10. Regular Expression Matching

    LeetCode 10. Regular Expression Matching 本博客参考:http://www.cnblogs.com/grandyang/p/4461713.html 详细解析见 ...

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

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

  3. 【To Understand! 重点 递归 动态规划 正则表达式匹配】LeetCode 44. Wildcard Matching

    LeetCode 44. Wildcard Matching Solution1:我的答案 递归,时间复杂度是O(2n)O(2n)O(2^n)因为超时未能AC 只是记录一下,以警示后人-- class ...

  4. LeetCode: 44. Wildcard Matching

    LeetCode: 44. Wildcard Matching 题目描述 Implement wildcard pattern matching with support for '?' and '* ...

  5. leetcode 10 Regular Expression Matching

    题目连接 https://leetcode.com/problems/regular-expression-matching/ Regular Expression Matching Descript ...

  6. LeetCode 10. Regular Expression Matching / 44. Wildcard Matching

    10. Regular Expression Matching 经典DP题目,比较复杂,需要多复习. dp[i][j] 表示 s 下标0~i,p 下标0~j 是否能够匹配   dp[i-1][j-1] ...

  7. LeetCode 10. Regular Expression Matching python特性、动态规划、递归

    前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...

  8. LeetCode 10 Regular Expression Matching(字符串匹配)

    题目链接 https://leetcode.com/problems/regular-expression-matching/?tab=Description   '.' Matches any si ...

  9. leetcode 10、Regular Expression Matching

    本题大意: 给你一个字符串s, 以一个模式串p,而模式串中规则匹配的只有 '.' 和 '*',其中 '.' 代表匹配任意一个字符,'*' 代表匹配的前一个字符有0个或多个,求字符串s和模式串p是否匹配 ...

最新文章

  1. 【SQL】sql语句GROUP BY
  2. 6.最小角回归(Least Angle Regression)
  3. Flink从入门到精通100篇(十五)-Flink SQL FileSystem Connector 分区提交与自定义小文件合并策略 ​
  4. 利用快排查询无序数组第k位大的数
  5. Oracle入门(十五)之数据库锁
  6. Python Turtle画分形树理解递归
  7. tp3.2 volist标签
  8. Java8 实战系列-05-lambda 类型推断
  9. win10激活时间(win10激活时间查询)
  10. Spire.Office for Java 7.5.4
  11. LeetCode Top 100 Liked Questions 416. Partition Equal Subset Sum (Java版; Medium)
  12. lic文件用计算机程序打开,后缀名是lic的文件用什么软件打开?
  13. vue和element框架搭配实现导航条跳转,点击按钮跳转页面导航条也跟着变换
  14. 7.20-7.22作业代码
  15. 5g局域网传输速度_5G时代网络传输速度能达到多少?
  16. android开发查漏补缺图
  17. 《西方经济学》笔记1-需求曲线
  18. 【Axure高保真原型】移动端钱包原型模板
  19. NFS共享存储服务介绍与案例详细配置过程
  20. HTML5期末大作业:在线电影网站设计——网上电影票预订网站 HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码

热门文章

  1. 导出手机内安装的应用
  2. 华为P20 旅行助手,从未有过的至尊私人导游服务!
  3. mysql wait millis_sql 连接数不释放 ,Druid异常:wait millis 40000, active 600, maxActive 600...
  4. Play on Words-uva 精短欧拉回路
  5. 罗技(Logitech)M325鼠标拆解
  6. Vue项目中链接websocket,做一个全局通知信息
  7. Agricultural Sprayer 农用喷雾机谷歌Google搜索量和海外市场竞争度分析
  8. 华为mate40pro和荣耀30Pro+ 哪个好
  9. PHP原生开发的各大音乐平台API接口
  10. python三维图如何标注曲面_(python)使用colormap作为第4维,x,y,z函数绘制3d曲面 - python...