LeetCode 10 Regular Expression Matching
来源:互联网 发布:激光祛痘的危害 知乎 编辑:程序博客网 时间:2024/06/09 15:58
题意:
给出一个字符串s和一个模式串p,p中"."表示任意单个字符,"*"表示"*"前面的字符个数为任意个,判断p能否表示s。
思路:
我使用了dfs方式,先把p解析成<char, count>结构的列表L,即某个字符允许出现几次。然后按顺序将L与s做验证,对"*"的处理方法是简单枚举个数。最后判断L与s是否同时结束。
注意,同时结束的意思是在s结束时L也结束或者L剩下的元素中count都是"*"。
求更快速的解法??
代码:
//// Created by house on 1/9/17.//class Solution {public: bool isMatch(string s, string p) { ch.clear(); cnt.clear(); len = 0; sl = s.size(); ss = s; for (int i = 0; i < p.size(); ++i) { ++len; ch.push_back(p[i]); if (i + 1 < p.size() && p[i + 1] == '*') { ++i; cnt.push_back(-1); } else { cnt.push_back(1); } } return dfs(0, 0); }private: vector<char> ch; vector<int> cnt; int len; int sl; string ss; bool dfs(int si, int ci) { if (si == sl && ci == len) { return true; } else if (si == sl && ci != len) { for (int i = ci; i < len; ++i) { if (cnt[i] != -1) { return false; } } return true; } else if (si != sl && ci == len) { return false; } if (cnt[ci] != -1) { if (ch[ci] != '.') { for (int i = 0; i < cnt[ci]; ++i) { if (ss[si + i] != ch[ci]) { return false; } } } return dfs(si + cnt[ci], ci + 1); } for (int i = 0; i <= sl - si; ++i) { if (i == 0 || ch[ci] == '.' || ss[si + i - 1] == ch[ci]) { if (dfs(si + i, ci + 1)) { return true; } } else { break; } } return false; }};
0 0
- Leetcode【10】:Regular Expression Matching
- [leetcode 10] Regular Expression Matching
- LeetCode(10) Regular Expression Matching
- [leetcode 10] Regular Expression Matching
- leetcode.10------------Regular Expression Matching
- [leetcode] 10 Regular Expression Matching
- [leetcode] 10 Regular Expression Matching
- LeetCode 10:《Regular Expression Matching》
- leetcode 10: Regular Expression Matching
- LeetCode 10 - Regular Expression Matching
- Leetcode #10 Regular Expression Matching
- leetcode 10 -- Regular Expression Matching
- LeetCode 10: Regular Expression Matching
- leetcode 10 -- Regular Expression Matching
- leetcode-10Regular Expression Matching
- leetcode-10 Regular Expression Matching
- leetcode 10: Regular Expression Matching
- leetcode 10 Regular Expression Matching
- [Android 知识点] 自定义View(二)
- struts2+spring+mybatis
- vim强大探究之光标移动
- 欢迎使用CSDN-markdown编辑器
- mybatis-generator最详细的配置详解
- LeetCode 10 Regular Expression Matching
- DEDECMS首页自动生成静态文件index.html
- 【Leetcode】119. Pascal's Triangle II
- 发送邮件
- Aerospike数据库实战(五) -- Aerospike C Client 开发
- Java集合库整体类结构
- 程序员面试金典: 9.9 递归和动态规划 9.6打印n对括号的全部有效组合
- xshell项目启动基本配置
- 使用事件总线eventbus替代startactivityforresult