给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。
‘.’ 匹配任意单个字符
‘*’ 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
说明:
s 可能为空,且只包含从 a-z
的小写字母。
p 可能为空,且只包含从 a-z
的小写字母,以及字符 .
和 *
。
题目链接
dp[i][j]表示p[:i]和s[:j]匹配
class Solution:
def isMatch(self, s, p):
s_length = len(s)
p_length = len(p)
dp = [[False for j in range(s_length)]for i in range(p_length)]
dp[0][0] = True
for i in range(1, p_length):
for j in range(s_length):
if p[i-1] == '*':
match_char = j>0 and (p[i-2]==s[j-1] or p[i-2] == '.')
dp[i][j] = dp[i-2][j] or (match_char and dp[i][j-1])
else:
match_char = j>0 and (p[i-1]==s[j-1] or p[i-1]=='.')
dp[i][j] = match_char and dp[i-1][j-1]
return dp[p_length-1][s_length-1]
if __name__ == "__main__":
s = "aa"
p = "a"
result = Solution()
print(result.isMatch(s, p))