LeetCode 44. Wildcard Matching

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

class Solution {
public:bool isMatch(string s, string p) {if (p.size() == 0) return s.empty();if (p.size() == 1) return (s.size() == 1 && (s[0] == p[0] || p[0] == '?'))|| (p[0] == '*');if (p[0] != '*') { //p中首字符非'*'if (s.size() == 0) return false;return (p[0] == '?' || p[0] == s[0]) && isMatch(s.substr(1), p.substr(1));} else { //p中首字符是'*'if (s.size() == 0) {for (int i = 0; i < p.size(); i++) if (p[i] != '*') return false;return true;}return isMatch(s, p.substr(1)) || isMatch(s.substr(1), p);}}
};

Solution2:好难理解。。。
转载自:https://blog.csdn.net/makuiyu/article/details/43698963
于是乎考虑非递归进行回溯,即,在s和p右移的时候,当p的当前字符为‘*’时,用ss和pp两个指针记录一下当前位置;当没有匹配的时候,s和p回溯到ss和pp位置的下一位置。就这样直到s到达字符串尾部。
注意一下,当s到达尾部的时候,p可能没有到达尾部。此时需要检测p的剩余字符是否全为‘*’:如果是,返回true;否则,返回false。
C代码如下:

bool isMatch(char* s, char* p) {const char *ss = s, *pp = NULL;while ('\0' != *s) {if ('?' == *p || *s == *p)++s, ++p;else if ('*' == *p)ss = s, pp = p ++;else if (pp != NULL)s = ++ ss, p = pp + 1;elsereturn false;}while ('*' == *p)++ p;return '\0' == *p;
}

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

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

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

  2. LeetCode: 44. Wildcard Matching

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

  3. [leetcode 44] Wildcard Matching

    Implement wildcard pattern matching with support for '?' and '*'. '? ' Matches any single character. ...

  4. [LeetCode] #44 Wildcard Matching

    mplement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ' ...

  5. LeetCode - 44. Wildcard Matching

    44. Wildcard Matching Problem's Link --------------------------------------------------------------- ...

  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】44. Wildcard Matching (2 solutions)

    Wildcard Matching Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any ...

  8. 【重点 递归构造二叉树】LeetCode 95. Unique Binary Search Trees II

    LeetCode 95. Unique Binary Search Trees II 本博客转载自:[1]https://segmentfault.com/a/1190000007443961 [2] ...

  9. 44. Wildcard Matching 通配符匹配

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

最新文章

  1. 怎么判断当前的os类型,手机类型
  2. DBlink的创建与删除
  3. vue导入静态js_如何在vue js中加载静态图像
  4. 微型计算机控制系统常用报警方式,微型计算机控制技术复习资料.docx
  5. Java中的Flyweight设计模式
  6. HDU-4292-Food(最大流匹配问题)
  7. 交换机和路由器的区别计算机网络,交换机和路由器的区别,教您交换机和路由器的区别...
  8. opencv学习系列:实例练习(含多个实例)
  9. symfony配置文件之三:routing和路由配置
  10. MYSQL常用的数学函数
  11. Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取相机设备的各种固件信息如DeviceID或者SerialNumber等(C++)
  12. 使用GPG验证文件签名
  13. Ubuntu PPPoE拨号上网
  14. a6400监听_横评 | 索尼A6400、A6500、松下G9、GH5S、富士X-T30和佳能M50
  15. 面试宝典之高分回答面试题(一)
  16. vue使用echarts图表小结
  17. Django 2.1.3 模型层 模型
  18. 路印协议项目进度报告(第37期)
  19. 双色球机选号码生成器(java)
  20. 2020年Android面试题三部曲——Java部分

热门文章

  1. 二相四线制步进电机驱动原理与Proteus仿真
  2. 传统ORB-SLam中位姿优化中雅克比矩阵讲解
  3. OSG仿真案例(0)
  4. python51课视频_【Python 课堂】第51课—— and-or技巧
  5. stm32核心板可以点亮灯吗_利用STM32F103C8T6最小系统板点亮流水灯
  6. 我到底该如何待你-“百度”
  7. mysql 位运算 一对多_介绍Mysql位运算简化一对多关系
  8. 起泡排序算法_气泡排序算法
  9. easymock_EasyMock验证
  10. spring事务 jdbc_Spring事务管理示例JDBC