给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。
‘.’ 匹配任意单个字符
‘*’ 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
说明:
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。
这里涉及到动态匹配和回溯算法,我在学习时候也不太懂。贴上回溯的代码,另一方面动态规划问题真的很重要
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],’.’})
# 如果 p 第二个字母是 *
if len§ >= 2 and p[1] == “*”:
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:])