[leetcode] 44. Wildcard Matching 解题报告
2016-04-02 15:22
417 查看
题目链接: https://leetcode.com/problems/wildcard-matching/
Implement wildcard pattern matching with support for
思路: 有两种特殊字符, '?'代表匹配一个任意字符, 这个比较好处理. '*'匹配任意多个字符, 这个需要考虑匹配多个字符. 因此我们可以记下最后出现'*'的位置, 这样当后面位置不匹配的时候再回到这里将不匹配的字符用'*'来匹配. 这样最后再判断是否p指针停留的位置到最后都是*, 如果是的话则可以匹配, 否则不可以匹配. 一个例子如: s = "aa", p = "aa****".
代码如下:
Implement wildcard pattern matching with support for
'?'and
'*'.
'?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence). 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", "*") → true isMatch("aa", "a*") → true isMatch("ab", "?*") → true isMatch("aab", "c*a*b") → false
思路: 有两种特殊字符, '?'代表匹配一个任意字符, 这个比较好处理. '*'匹配任意多个字符, 这个需要考虑匹配多个字符. 因此我们可以记下最后出现'*'的位置, 这样当后面位置不匹配的时候再回到这里将不匹配的字符用'*'来匹配. 这样最后再判断是否p指针停留的位置到最后都是*, 如果是的话则可以匹配, 否则不可以匹配. 一个例子如: s = "aa", p = "aa****".
代码如下:
class Solution { public: bool isMatch(string s, string p) { int old_s, old_p = -1, pos_s = 0, pos_p = 0; while(pos_s < s.size()) { if(s[pos_s]==p[pos_p] || p[pos_p]=='?') pos_s++, pos_p++; else if(p[pos_p] == '*') old_s = pos_s+1, old_p = pos_p, pos_p++; else if(old_p != -1) pos_s = old_s, pos_p = old_p; else return false; } while(pos_p < p.size() && p[pos_p] == '*') pos_p++; return pos_p == p.size(); } };参考: https://leetcode.com/discuss/49254/fastest-non-dp-solution-with-o-1-space
相关文章推荐
- Java联网技术之一TCP
- Tricks(二十)—— 从 N 个数中等概率地产生 M 个数
- 标志寄存器9中标志
- Android的sp,dp,px
- C\C++函数原型的意义
- 设置本地yum源
- Keil仿真调试
- [Java][Android][Process] 暴力的服务能够解决一切,暴力的方式运行命令行语句
- 【2016.4.2】结对编程 初章
- git merge的recursive策略和merge-base
- 团队博客列表
- 【git】:git简明教程
- 第1周 C Primer Plus(第五版) 数组 程序清单10.1例题
- Akka并发编程——第二节:Actor模型(一)
- 小菜鸟集各位高手指点及自学谈谈对WEB标准的理解
- 轮播图系列教程(四)自动切换,定时器应用——和派孔明
- easyui tree文本单击事件切换展开/折叠节点的状态
- Delphi中Indy 10的安装和老版本的卸载
- 第六周项目一 分数类的雏形
- Git常用命令