RegularExpressionMatching
来源:互联网 发布:linux init 1 编辑:程序博客网 时间:2024/06/09 16:02
正则表达匹配问题
看似问题复杂,其实理清了也就OK了,情况要分清楚!
不能一堆逻辑堆在一起,必然漏洞百出就跟之前一道题目“判断一个字串是不是数字的问题”,各种Try才通过,很不理想。
这个题一开始我也陷入了这样的困局,所以走不出来了。
思路:
1.找到问题的关键,关键在于p串的*,导致了各种情况的发生。还有就是s串中重复的字符。
2.既然p中的*最为关键,则按此分情况讨论:
p的第二个字符是不是*:
1.是 就要看看第一个s与p是不是相同,是相同则要开始去除s中相同的字符(通过s++实现),这个过程一定不能直接去除s,s往后挪一次,则要递归一次去除后的字串与p+2是否匹配,否则像(s="aab" p="a*c*ab)的情况就无法匹配了。去除之后,则继续递归调用去匹配s与p+2;
2.不是 这种情况稍微简单些,p+1不是*则说明都是字符,*s == *p就去掉头继续递归匹配了,否则就返回false没商量。
代码:
bool isMatch(char* s, char* p) { if(!*p) { if(!*s) return true; else return false; } if(*(p+1) == '*') { while(*s == *p || (*s && *p == '.')) { if(isMatch(s,p+2)) return true; s++; } return isMatch(s,p+2); } else { if(*s && (*s == *p || *p == '.')) { return isMatch(s+1,p+1); } else { return false; } }}
阅读全文
0 0
- RegularExpressionMatching
- 3.6RegularExpressionMatching
- Leetcode--RegularExpressionMatching
- leetcode10.RegularExpressionMatching
- Android Gradle Plugin获取依赖API详解
- Andriod开发技巧——Fragment的懒加载
- kafka分区及副本在broker的分配
- C++删除单链表值为K的结点空间复杂度O(1)
- 帆布指纹识别
- RegularExpressionMatching
- springMvc校验(12)
- R语言绘制箱体图举例图文版
- oracle只修改年份
- Runtime的使用3 【字典转模型】
- oracle exp导出部分表和部分数据
- kafka存储机制
- 修改maven默认JDK
- hadoop架构分析之启动脚本分析(yarn部分)