正则表达式递归写法

简介: 注意不要盲目相信以下内容! 不要盲目相信以下内容! 不要盲目相信以下内容! (重要的事情说三遍),虽然以下内容也经过了我的验证,但是我的验证可能有错误的地方,欢迎大家留言告知。

注意不要盲目相信以下内容! 不要盲目相信以下内容! 不要盲目相信以下内容! (重要的事情说三遍),虽然以下内容也经过了我的验证,但是我的验证可能有错误的地方,欢迎大家留言告知。希望这篇文章成为你深入探索相关领域的引子启发,而不是标准答案


‘.’ 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

在Leetcode上看到了一种非常漂亮的递归解法,比我自己一堆判断的写法漂亮好多,转出来参考一下~

    bool isMatch(string s, string p) {
        if (p.empty())    return s.empty();

        if ('*' == p[1])
            // x* matches empty string or at least one character: x* -> xx*
            // *s is to ensure s is non-empty
            return (isMatch(s, p.substr(2)) || !s.empty() && (s[0] == p[0] || '.' == p[0]) && isMatch(s.substr(1), p));
        else
            return !s.empty() && (s[0] == p[0] || '.' == p[0]) && isMatch(s.substr(1), p.substr(1));

    }
目录
相关文章
|
6月前
|
JavaScript 前端开发 Java
|
2月前
|
JavaScript 前端开发 C++
JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方
JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方
|
4月前
|
JavaScript
js 校验括号——括号不可嵌套且需成对出现
js 校验括号——括号不可嵌套且需成对出现
55 2
全排列的两种写法 2021-02-17
全排列的两种写法 2021-02-17
|
机器学习/深度学习 Cloud Native Go
779. 第K个语法符号:简单模拟
这是 力扣上的 779. 第K个语法符号,难度为 中等。
|
前端开发
前端学习案例7-正则-括号的用法
前端学习案例7-正则-括号的用法
82 0
前端学习案例7-正则-括号的用法
|
前端开发
前端学习案例8-正则-括号的用法
前端学习案例8-正则-括号的用法
80 0
前端学习案例8-正则-括号的用法
|
前端开发 算法 JavaScript
LeetCode检查单词是否为句中其他单词的前缀使用JavaScript解题|前端学算法
LeetCode检查单词是否为句中其他单词的前缀使用JavaScript解题|前端学算法
97 0
LeetCode检查单词是否为句中其他单词的前缀使用JavaScript解题|前端学算法
|
算法 Java 索引
leetcode 344. 反转字符串 递归写法
leetcode 344. 反转字符串 递归写法
leetcode 344. 反转字符串 递归写法
|
算法 C++
“递归算法”求数组最大值(含详细注释解析C++)
“递归算法”求数组最大值(含详细注释解析C++)
257 0
“递归算法”求数组最大值(含详细注释解析C++)