正则表达式匹配
来源:互联网 发布:鬼吹灯 简介 知乎 编辑:程序博客网 时间:2024/05/23 22:52
题目描述
请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配
昨天晚上提交不通过,今天提交就能通过,也是服了。
题目明显可以实用递归进行求解,注意一下几种情况,
1、pattern中出现连续两个‘*’或者开头就是”*”的直接返回false,因为这不是正确的正则表达式。
2、如果pattern到达末尾,那么str必须到达末尾,否则直接返回不匹配
3、如果pattern没有达到末尾,但是str到达末尾,则需要单独判断之后的pattern是否是连续出现两个非“*”如果是返回false,直到遍历到pattern末尾返回true
4、对于其他情况,如果对应的pattern第二个字符不是“*”,那么直接比对当前字符,不匹配直接返回false,匹配的话pattern和str都向前加1;
5、如果对应的pattern第二个字符是‘*’那么分为以下几种情况
如果当前字符是不匹配的:
- 可以直接将pattern后移两个字符,对应的*是代表前面出现0次的情况
如果当前字符是匹配的:
- str直接向后移动一个,对应的*是出现2次以上的情况
- 可以直接将pattern后移两个字符,对应的*是代表前面出现0次的情况
- str向后移动一个,pattern向后移动2个,代表*前面的字符只出现1次的情况
class Solution {public: bool match(char* str, char* pattern) { if(*pattern=='*') return false; char* patt=pattern; while(*patt!='\0') { if(*patt=='*'&&*(patt+1)=='*') return false; else ++patt; } return recurmatch(str,pattern); } bool recurmatch(char* str, char* pattern) { if(*pattern=='\0'&&*str=='\0') return true; else if(*pattern=='\0'&&*str!='\0') return false; else if(*pattern!='\0'&&*str=='\0') return judgepatt(pattern); if(*(pattern+1)!='*') { if(*str==*pattern||*pattern=='.') return recurmatch(str+1, pattern+1); else return false; } if(*pattern==*str||*pattern=='.') return recurmatch(str+1, pattern)||recurmatch(str, pattern+2)||recurmatch(str+1, pattern+2); return recurmatch(str, pattern+2); } bool judgepatt(char *patt){ while(*patt!='\0') { if((*patt!='*')&&(*(patt+1)!='*')) return false; ++patt; } return true; }};
0 0
- 正则表达式字符匹配
- 正则表达式 匹配"<"方法!
- 正则表达式匹配规则
- 正则表达式匹配规则
- 正则表达式最小匹配
- 正则表达式匹配字符串
- 正则表达式匹配
- 正则表达式匹配汉字
- 正则表达式匹配规则
- 正则表达式匹配关键字
- 正则表达式多次匹配
- 正则表达式匹配
- 正则表达式匹配汇总
- java:正则表达式匹配
- 正则表达式匹配居民身份证
- 正则表达式匹配次
- 匹配的正则表达式
- 正则表达式匹配
- 查找:链表顺序查找和有序数组二分查找
- tp5中url使用js变量传参方法
- iOS解决NSArray、NSDictionary打印乱码问题
- Server returned HTTP response code: 505 问题解决
- 欢迎使用CSDN-markdown编辑器
- 正则表达式匹配
- Hadoop核心机制详细解析
- Swift3.0 实用的截取字符串方法封装
- DDI DEV DRV 之间的关系
- java面试题和答案(下)
- Anton and Fairy Tale
- c#中蹒跚学步
- 兔子藏洞
- 教你用最简单的方法使用requirejs