正则表达式匹配
来源:互联网 发布:hough变换检测圆算法 编辑:程序博客网 时间:2024/06/05 14:51
题目:实现支持'.'和"*"的正则表达式匹配
'.'匹配任意一个字母
'*'匹配0个或者多个前面的字符。
匹配应该覆盖整个输入字符串而不是仅仅一部分。如字符串“aaa”与模式"a.a"和"ab*ac*a"匹配,而与"aa.a"及"ab*a"均不匹配。
思路:首先要理解题意(想了好久才了解这个题目的意思)。这个说的是两个字符串要完全相等。意思就是判断是否能用含有'.'和"*"的字符串(我们称模式)来完全代替另一个字符串(我们称原串)。
(1)当原串为空时,显然只有模式串为空,或者具有“X*X*”的形式可以代替原串。
(2)当原串不为空,而模式串为空,显然false
(3)当原串不为空,模式串也不为空。
如果模式串第二个字符为"*":如果模式串第一个字符与原串第一个字符相等,那么两者都可以进2;如果两者第一个字符不相等,那么只能模式串进2;
如果模式串第二个字符不为"*":如果模式串第一个字符与原串第一个字符相等,那都可以进1;否则必然不能代替原串,返回false.
代码用递归的方式实现:
bool isMatch(string s, string p) { // write your code here //注意:'*'是匹配'*'之前的字符,匹配0个字符指的是前面的字符为0,即删去前面的字符 //匹配,要两个字符串完全相等。意思就是判断是否能用含有'.'或"*"的字符串代替另一个字符串 if (s.length() == 0){ // s串匹配完合法的情况只有p为空,或是 "X*X*"的形式 if (p.length() & 1) return false; else { for (int i = 1; i < p.length(); i += 2) { if (p[i] != '*') return false; } } return true; } if (p.length() == 0) return false; if (p.length() > 1 && p[1] == '*') { if (p[0] == '.' || s[0] == p[0]) { return isMatch(s.substr(1), p) || isMatch(s, p.substr(2)); } else return isMatch(s, p.substr(2)); } else { if (p[0] == '.' || s[0] == p[0]) { return isMatch(s.substr(1), p.substr(1)); } else return false; } }
阅读全文
0 0
- 正则表达式字符匹配
- 正则表达式 匹配"<"方法!
- 正则表达式匹配规则
- 正则表达式匹配规则
- 正则表达式最小匹配
- 正则表达式匹配字符串
- 正则表达式匹配
- 正则表达式匹配汉字
- 正则表达式匹配规则
- 正则表达式匹配关键字
- 正则表达式多次匹配
- 正则表达式匹配
- 正则表达式匹配汇总
- java:正则表达式匹配
- 正则表达式匹配居民身份证
- 正则表达式匹配次
- 匹配的正则表达式
- 正则表达式匹配
- 在java中int类型跟byte数组的转换
- qduoj 河神的难题 思维 实验室腊新呐 枚举
- 用java写websocket客户端
- [AHK]Bing Desktop Wallpaper Changer(必应壁纸随心换)
- JDK动态代理源码分析之二
- 正则表达式匹配
- 深入浅出理解Paxos算法
- 前谷歌首席Java架构师谈如何设优秀的API~
- RAML概述
- 得到-薛兆丰的北大经济学课-0-目录
- 建议1:理解pythonic概念
- session的钝化与活化
- CardinalSplineTo导出到Lua
- framework7---framework7初始化应用myApp之中参数