Regular Expression Matching 递归
2015-07-07 10:17
302 查看
思路:
递归。时间复杂度O(N),空间复杂度O(1)。
如果p[i]匹配到了最后的
如果没到最后,且如果 当前字符的下一个字符不是
如果没到最后,且如果 当前字符是
最后,看
递归。时间复杂度O(N),空间复杂度O(1)。
*代表可以匹配 0个 或 多个 前导字符;
.代表可以匹配任意一个字符;
如果p[i]匹配到了最后的
'\0',这是s[i]也到最后的
'\0',则匹配成功,否则,失败;
如果没到最后,且如果 当前字符的下一个字符不是
*,必须一一匹配;
如果没到最后,且如果 当前字符是
*,看
*的作用是1次or多次是否可以匹配;
最后,看
*的作用是0次是否匹配;
class Solution { private: bool matchHelper(string &s, string &p, int i, int j) { if(p[j] == '\0') { return s[i] == '\0'; } if(p[j+1] != '*') { if((s[i] == p[j]) || (p[j] == '.' && s[i] != '\0')) { return matchHelper(s, p, i+1, j+1); }else { return false; } } while((s[i] == p[j]) || (p[j] == '.' && s[i] != '\0')) { if(matchHelper(s, p, i, j+2)) { return true; } ++i; } return matchHelper(s, p, i, j+2); } public: bool isMatch(string s, string p) { return matchHelper(s, p, 0, 0); } };
相关文章推荐
- 32、du命令
- Spring 使用注解方式进行事务管理
- 云服务器使用帮助
- SQL连接查询深度探险
- Could not connect to Redis at XX.XX.XX.XX:XX: Cannot assign requested address
- String c = new String("xyz")会创建几个String对象的问题
- SqlServer中查看当前Open的Cursor方法
- 社説 20150707 なでしこ準優勝 ブームから「文化」への契機に
- linux程序设计——取消一个线程(第十二章)
- pspice 仿真
- Java 运算符优先级
- LDAP问题汇总
- Matlab在曲线中如何标示极值点?
- mysql中通过not exists寻找两个表中的差异数据
- mysql的源码包方式安装(mysql5.5)
- chmod和chown的区别
- angular笔记
- Oracle中instr函数使用方法
- 日经社説 20150707 ギリシャはユーロ離脱への道を歩むのか
- FileNotFoundError: [Errno 2] No such file or directory: 'template/