剑指-面试题19 正则表达式匹配
2020-04-02 07:30
141 查看
正则表达式匹配
题目
思路:
递归求解:
(1)特殊情况,同时也是递归出口:如果p是空串,返回s是否为空串。如果p不为空,保证一定存在p[1](可能是字符串结尾\0)
(2)假如p[1] == “星号”的话,可以尝试两种情况:情况一是递归比较s和p.substr(2);情况二是当s[0]可以匹配p[0]时, 尝试递归比较s.substr(1)和p,这里没有必要比较s.substr(1) 和 p.substr(2),因为这种情况已经包含在递归比较s.substr(1)和p当中了。
(3)假如p[1] !=“星号”如果p[0]不匹配s[0],返回false,否则递归判断s.substr(1)和p.substr(1)。
C++
class Solution { public: bool isMatch(string s, string p) { if (p.empty()) return s.empty(); if (p.size() > 1 && p[1] == '*') { return (isMatch(s, p.substr(2)) || (!s.empty()) && (s[0] == p[0] || p[0] == '.') && isMatch(s.substr(1), p)); } return !s.empty() && (s[0] == p[0] || p[0] == '.') && isMatch(s.substr(1), p.substr(1)); //p的第二个值不是*,就递归判断s和p的下一个字符 } };
python
class Solution: def isMatch(self, s: str, p: str) -> bool: if not p: return not s first_match = bool(s) and p[0] in [s[0], '.'] if len(p) >= 2 and p[1] == '*': # 如果发现有字符和 '*' 结合,或者匹配该字符 0 次,然后跳过 该字符 和 '*' # 或者当 p[0] 和 s[0] 匹配后,移动 s return self.isMatch(s, p[2:]) or (first_match and self.isMatch(s[1:], p)) else: return first_match and self.isMatch(s[1:], p[1:])
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 剑指offer--面试题19:正则表达式匹配
- 剑指Offer 面试题19:正则表达式匹配 Java代码实现
- 【剑指offer】面试题19:正则表达式匹配
- 剑指offer-面试题53-正则表达式匹配
- 【剑指**】19.正则表达式匹配
- 【剑指Offer】面试题53:正则表达式匹配
- 面试题19. 正则表达式匹配
- 剑指offer--面试题53:正则表达式匹配
- 剑指offer---19(正则表达式匹配)
- 剑指offer - 面试题53:正则表达式匹配
- 剑指offer 面试题19 正则表达式匹配
- 面试题19:正则表达式匹配
- 剑指Offer面试题53:正则表达式匹配 Java实现
- 剑指offer-面试题53:正则表达式匹配
- 剑指offer面试题19:正则表达式匹配(Java 实现)
- 剑指Offer(19)正则表达式匹配
- 【剑指Offer学习】【面试题53:正则表达式匹配】
- 剑指offer-面试题19:正则表达式匹配 双序列动态规划
- 【Java】 面试题19:正则表达式匹配
- 《剑指offer》面试题19:正则表达式匹配