1class Solution:2def isMatch(self, s, p):3n = len(s)4m = len(p)5dp = [[False for _ in range(m + 1)] for _ in range(n + 1)]6dp[0][0] = True7for c in range(1, m + 1):8if p[c - 1] == "*" and c > 1:9dp[0][c] = dp[0][c - 2]10for r in range(1, n + 1):11for c in range(1, m + 1):12if p[c - 1] == s[r - 1] or p[c - 1] == ".":13dp[r][c] = dp[r - 1][c - 1]14elif c > 1 and p[c - 1] == "*":15if p[c - 2] == "." or s[r - 1] == p[c - 2]:16dp[r][c] = dp[r][c - 2] or dp[r - 1][c]17else:18dp[r][c] = dp[r][c - 2]19return dp[n][m]