[LeetCode] Regular Expression Matching [6]
称号:
Implement regular expression matching with support for '.' and '*'.
'.' Matches any single character.
'*' Matches zero or more of the preceding element. The matching should cover the entire input string (not partial). The function prototype should be:
bool isMatch(const char *s, const char *p) Some examples:
isMatch("aa","a") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "a*") → true
isMatch("aa", ".*") → true
isMatch("ab", ".*") → true
isMatch("aab", "c*a*b") → true
解题思路
设计一个支持‘.' 和 '*' 的正則表達式匹配算法。
这个题复杂的地方在于对于 '*' 的处理。这个符号在正則表達式中被称为贪婪型的量词。这个量词在实际匹配过程中也是尽可能多的匹配直到词尾或者不匹配成功才结束。然后假设其后面还有没有匹配的,则回退到合适的位置。然后才进行下一个匹配。
正則表達式中的匹配优先与回溯大概也就是这个意思。关于正則表達式这方面的知识。有兴趣能够读读《精通正則表達式》的第4章表达式的匹配原理。
回到本题,正由于 '*'的特殊性。我们在分类的时候选择依据 '*' 来进行,分类后其子问题也是一个正則表達式匹配的问题。所以这能够使用递归来做。以下来看看代码,代码中有凝视说明匹配的类型:
代码实现:
class Solution {
public:
bool isMatch(const char *s, const char *p) {
if(s==NULL || p==NULL) return false;
if(*p == '\0') return *s=='\0';
if(*(p+1) != '*'){
if(*p==*s || (*p=='.' && *s!='\0'))
return isMatch(s+1, p+1);
return false;
}
else{
//s="aaaabbbb", p="a.*b"
while(*p==*s || (*p=='.' && *s!='\0')){
if(isMatch(s, p+2))
return true;
++s;
}
//s="ab", p="aa*b"
return isMatch(s, p+2);
}
}
};
另外,我开通了微信公众号--分享技术之美,我会不定期的分享一些我学习的东西.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3dhZ2xl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
)
版权声明:本文博主原创文章,博客,未经同意不得转载。
[LeetCode] Regular Expression Matching [6]的更多相关文章
- [LeetCode] Regular Expression Matching 正则表达式匹配
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- LeetCode | Regular Expression Matching
Regular Expression Matching Implement regular expression matching with support for '.' and '*'. '.' ...
- [leetcode]Regular Expression Matching @ Python
原题地址:https://oj.leetcode.com/problems/regular-expression-matching/ 题意: Implement regular expression ...
- [LeetCode] Regular Expression Matching(递归)
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- LeetCode——Regular Expression Matching
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- Leetcode:Regular Expression Matching分析和实现
题目大意是要求我们实现一个简单的正则表达式全匹配判断.其中正则表达式中只包含一般字符,以及全匹配字符.和变长字符*.其中.可以匹配一个字符,而*与前一个字符相关联,x*可以被看作任意多个x(0到正无穷 ...
- LeetCode Regular Expression Matching 网上一个不错的实现(非递归)
'.' Matches any single character.'*' Matches zero or more of the preceding element. The matching sho ...
- LeetCode: Regular Expression Matching 解题报告
Roman to IntegerGiven a roman numeral, convert it to an integer. Input is guaranteed to be within th ...
- lc面试准备:Regular Expression Matching
1 题目 Implement regular expression matching with support for '.' and '*'. '.' Matches any single char ...
随机推荐
- xcode多target
原文:http://www.codza.com/free-iphone-app-version-from-the-same-xcode-project There are more than 15,0 ...
- OpenCL 查看设备信息
好久没搞OpenCL了.可是这是个好东西.不能不学,之前发了篇设置OpenCL的文章.看的人还真多,看来大家都知道这个好东西了,都想把OpenCL搞起.只是学习难度还是相当高的. 之前忙搞算法,所以非 ...
- MyReport演示下载连接和相关文章索引
演示地址 Flex集成方式 (旧版2.6) HTML集成方式 MyReport产品站点 NEW 相关文章 ------------------------2.6下面版本号--------------- ...
- IntelliJ IDEA Groovy(转)
更新环境变量: source /etc/profile 验证是否成功: # groovy -version Groovy Version: 2.3.6 JVM: 1.7.0_67 Vendor: Or ...
- Go by Example
Go by Example Go is an open source programming language designed for building simple, fast, and reli ...
- SSH协议详解(转)
转发的http://blog.csdn.net/macrossdzh/article/details/5691924 很透彻啊,学习了 一.什么是SSH SSH是英文Secure Shell的简写形式 ...
- JavaScript类数组对象参考
JavaScript和DOM中有很多类数组对象,它们有以下特点 1.有length属性 2.可以使用[]通过下标访问 3.部分类数组对象使用[]访问成员时不只可以使用下标,还可以使用id或name 4 ...
- 从lca到树链剖分 bestcoder round#45 1003
bestcoder round#45 1003 题,给定两个点,要我们求这两个点的树上路径所经过的点的权值是否出现过奇数次.如果是一般人,那么就是用lca求树上路径,然后判断是否出现过奇数次(用异或) ...
- 使用psftp.exe
使用psftp.exe 点击打开psftp.exe,出现如下图的命令窗口.
- 理解cookie的path和domain属性(转)
今天在做验证码时发现一个问题:A.B窗口都打开同一个页面,A先生成一个验证码,B再生成验证码,这时A所生成的验证码被B覆盖掉了.原因是使用了同名的cookie来存储验证码.一时找不到解决方法就参考了W ...