Regular Expression Matching 递归

原创 2015年07月07日 10:17:25

思路:
递归。时间复杂度O(N),空间复杂度O(1)。

* 代表可以匹配 0个 或 多个 前导字符;
. 代表可以匹配任意一个字符;

如果p[i]匹配到了最后的'\0',这是s[i]也到最后的'\0' ,则匹配成功,否则,失败;

如果没到最后,且如果 当前字符的下一个字符不是 * ,必须一一匹配;

如果没到最后,且如果 当前字符是 * ,看 * 的作用是1次or多次是否可以匹配;

最后,看* 的作用是0次是否匹配;

class Solution {
private:
    bool matchHelper(string &s, string &p, int i, int j) {
        if(p[j] == '\0') {
            return s[i] == '\0';
        }
        if(p[j+1] != '*') {
            if((s[i] == p[j]) || (p[j] == '.' && s[i] != '\0')) {
                return matchHelper(s, p, i+1, j+1);
            }else {
                return false;
            }
        }
        while((s[i] == p[j]) || (p[j] == '.' && s[i] != '\0')) {
            if(matchHelper(s, p, i, j+2)) {
                return true;
            }
            ++i;
        }
        return matchHelper(s, p, i, j+2);
    }
public:
    bool isMatch(string s, string p) {
        return matchHelper(s, p, 0, 0);
    }
};
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

LeetCode-10-Regular-Expression-Matching 递归模拟正则表达式

没什么好说的,注意一下为空的情况就行。 把p分类讨论了,然后写就行了。 class Solution(object): def isMatch(self, s, p): "...

10. Regular Expression Matching-动态规划/递归回溯

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

leetcode 10.Regular Expression Matching(正则表达式匹配) 解题思路和方法

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

LeetCode之10 --- Regular Expression Matching

题目:   , Implement regular expression matching with support for '.' and '*'. '.' Matches any sin...

leetcode 10. Regular Expression Matching

leetcode 10. Regular Expression Matching 只有两种特殊字符*和. 动态规划DPempty text与empty pattern是match的用状态表T[i +...

[LeetCode] Regular Expression Matching 解题报告

[题目] mplement regular expression matching with support for ‘.’ and ‘*’. ‘.’ Matches any single ch...

leetcode -- Regular Expression Matching -- dp 重点

https://leetcode.com/problems/regular-expression-matching/trick: 如果有两个str list, 考虑用2D dp[i][j]思路1 递归...

LeetCode Regular Expression Matching 极品代码赏析

这个条件很容易忽略,也是最重要的条件了,因为这个相当于*可以把它的前缀字母”吃掉“ 所以也是为什么我们需要“往前看”,看到pattern字符串后一位,假设这个字符串为const char *p; 那...

Regular Expression Matching -- LeetCode

原题链接: http://oj.leetcode.com/problems/regular-expression-matching/  这个题目比较常见,但是难度还是比较大的。我们先来看看brute ...

leetcode 10 Regular Expression Matching

Regular Expression Matching Total Accepted: 51566 Total Submissions: 249926 Implement regul...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)