称号:

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);
}
}
};
假设你认为本篇对你有收获,请帮顶。

另外,我开通了微信公众号--分享技术之美,我会不定期的分享一些我学习的东西.

你能够搜索公众号:swalge 或者扫描下方二维码关注我

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3dhZ2xl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

(转载文章请注明出处: http://blog.csdn.net/swagle/article/details/28407559
)

版权声明:本文博主原创文章,博客,未经同意不得转载。

[LeetCode] Regular Expression Matching [6]的更多相关文章

  1. [LeetCode] Regular Expression Matching 正则表达式匹配

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  2. LeetCode | Regular Expression Matching

    Regular Expression Matching Implement regular expression matching with support for '.' and '*'. '.' ...

  3. [leetcode]Regular Expression Matching @ Python

    原题地址:https://oj.leetcode.com/problems/regular-expression-matching/ 题意: Implement regular expression ...

  4. [LeetCode] Regular Expression Matching(递归)

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  5. LeetCode——Regular Expression Matching

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  6. Leetcode:Regular Expression Matching分析和实现

    题目大意是要求我们实现一个简单的正则表达式全匹配判断.其中正则表达式中只包含一般字符,以及全匹配字符.和变长字符*.其中.可以匹配一个字符,而*与前一个字符相关联,x*可以被看作任意多个x(0到正无穷 ...

  7. LeetCode Regular Expression Matching 网上一个不错的实现(非递归)

    '.' Matches any single character.'*' Matches zero or more of the preceding element. The matching sho ...

  8. LeetCode: Regular Expression Matching 解题报告

    Roman to IntegerGiven a roman numeral, convert it to an integer. Input is guaranteed to be within th ...

  9. lc面试准备:Regular Expression Matching

    1 题目 Implement regular expression matching with support for '.' and '*'. '.' Matches any single char ...

随机推荐

  1. poj3414(bfs)

    题目链接:http://poj.org/problem?id=3414 题意:给你两个容器 A  B 问是否能够经过有限的步骤倒水,得到容量为 C 的水,输出最小的步数,同时输出每一步的操作.如果不能 ...

  2. H3C SecPath F100-C 防火墙配置说明

    最近的工作需要,将H3C SecPath F100-C天津联通的房间防火墙配置: 网络拓扑例如,下面的: 进入系统管理界面: 默认登陆地址:192.168.0.1 截图由于涉及公司信息就没有上传.大家 ...

  3. xcode Workspaces

    A workspace is an Xcode document that groups projects and other documents so you can work on them to ...

  4. 调用WCF的异步方法

    原文:调用WCF的异步方法 AsyncCallback aLoginCallback = delegate(IAsyncResult result) { var aSystemUser = WcfCl ...

  5. Linking Containers Together

    Linking Containers Together In the Using Docker section we touched on connecting to a service runnin ...

  6. XML,Object,Json分析转换Xstream采用

    XML,Object,Json转换之浅析Xstream的使用 请尊重他人的劳动成果,转载请注明出处:XML,Object,Json转换之浅析Xstream的使用 XStream的是一个简单的库.主要用 ...

  7. 外网SSH访问内网LINUX的N种方法

    外网SSH访问内网LINUX的N种方法 http://www.nat123.com/Pages_8_260.jsp 一,动态公网IP环境 1,环境描述: 路由器分配的是动态公网IP,且有路由管理权限, ...

  8. 【Oracle】物理体系结构

     一.ORACLE 物理体系结构 原理结构图 各部分解释: PGA: 私有内存区,仅供当前发起用户使用. 三个作用 用户登录后的session信息会保存在PGA. 运行排序.假设内存不够,orac ...

  9. 每日回顾Shell —cat,tail,head

    Shell中常常会用到cat命令.可是总是不是特别清楚: cat命令的用途是连接文件或标准输入并打印. 这个命令经常使用来显示文件内容.或者将几个文件连接起来显示.或者从标准输入读取内容并显示,它常与 ...

  10. Uva11464 开关问题

    给一个n×n的01矩阵,你的任务是将尽量少的0变成1,是的每个元素的上下左右的位置(如果存在的话)的之和均为偶数.1<=n<=15. 如果暴力整个矩阵,那么时间复杂度是O(2^(n*n)) ...