【To Understand! 重点 递归 动态规划 正则表达式匹配】LeetCode 44. Wildcard Matching
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相关推荐
- 【重点 递归 动态规划 正则表达式匹配】LeetCode 10. Regular Expression Matching
LeetCode 10. Regular Expression Matching 本博客参考:http://www.cnblogs.com/grandyang/p/4461713.html 详细解析见 ...
- LeetCode: 44. Wildcard Matching
LeetCode: 44. Wildcard Matching 题目描述 Implement wildcard pattern matching with support for '?' and '* ...
- [leetcode 44] Wildcard Matching
Implement wildcard pattern matching with support for '?' and '*'. '? ' Matches any single character. ...
- [LeetCode] #44 Wildcard Matching
mplement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ' ...
- LeetCode - 44. Wildcard Matching
44. Wildcard Matching Problem's Link --------------------------------------------------------------- ...
- 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] ...
- 【LeetCode】44. Wildcard Matching (2 solutions)
Wildcard Matching Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any ...
- 【重点 递归构造二叉树】LeetCode 95. Unique Binary Search Trees II
LeetCode 95. Unique Binary Search Trees II 本博客转载自:[1]https://segmentfault.com/a/1190000007443961 [2] ...
- 44. Wildcard Matching 通配符匹配
Title 给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 '?' 和 '*' 的通配符匹配. '?' 可以匹配任何单个字符. '*' 可以匹配任意字符串(包括空字符串). 两个字符串完全 ...
最新文章
- 怎么判断当前的os类型,手机类型
- DBlink的创建与删除
- vue导入静态js_如何在vue js中加载静态图像
- 微型计算机控制系统常用报警方式,微型计算机控制技术复习资料.docx
- Java中的Flyweight设计模式
- HDU-4292-Food(最大流匹配问题)
- 交换机和路由器的区别计算机网络,交换机和路由器的区别,教您交换机和路由器的区别...
- opencv学习系列:实例练习(含多个实例)
- symfony配置文件之三:routing和路由配置
- MYSQL常用的数学函数
- Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取相机设备的各种固件信息如DeviceID或者SerialNumber等(C++)
- 使用GPG验证文件签名
- Ubuntu PPPoE拨号上网
- a6400监听_横评 | 索尼A6400、A6500、松下G9、GH5S、富士X-T30和佳能M50
- 面试宝典之高分回答面试题(一)
- vue使用echarts图表小结
- Django 2.1.3 模型层 模型
- 路印协议项目进度报告(第37期)
- 双色球机选号码生成器(java)
- 2020年Android面试题三部曲——Java部分
热门文章
- 二相四线制步进电机驱动原理与Proteus仿真
- 传统ORB-SLam中位姿优化中雅克比矩阵讲解
- OSG仿真案例(0)
- python51课视频_【Python 课堂】第51课—— and-or技巧
- stm32核心板可以点亮灯吗_利用STM32F103C8T6最小系统板点亮流水灯
- 我到底该如何待你-“百度”
- mysql 位运算 一对多_介绍Mysql位运算简化一对多关系
- 起泡排序算法_气泡排序算法
- easymock_EasyMock验证
- spring事务 jdbc_Spring事务管理示例JDBC