19、正则表达式匹配
请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。
示例 1:
输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。
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] == '*': return (first_match and self.isMatch(s[1:], p)) or self.isMatch(s, p[2:]) else: return first_match and self.isMatch(s[1:], p[1:])
class Solution: def isMatch(self, s: str, p: str) -> bool: dp = [[False] * (len(p) + 1) for _ in range(len(s) + 1)] dp[-1][-1] = True for i in range(len(s), -1, -1): for j in range(len(p) - 1, -1, -1): first_match = i < len(s) and p[j] in {s[i], '.'} if j + 1 < len(p) and p[j] == '*': dp[i][j] = dp[i][j + 2] or (first_match and dp[i + 1][j]) else: dp[i][j] = first_match and dp[i + 1][j + 1] return dp[0][0]