Leetcode: 44. Wildcard Matching
Problem Statement
class Solution:
def isMatch(self, s: str, p: str) -> bool:
s += "$"
p += "$"
N = len(s)
M = len(p)
dp = [[False] * (M + 1) for _ in range(N + 1)]
for i in range(N, -1, -1):
for j in range(M, -1, -1):
if i == N and j == M:
dp[i][j] = True
elif i == N or j == M:
dp[i][j] = False
elif p[j] == "?":
dp[i][j] = dp[i + 1][j + 1]
elif s[i] == p[j]:
dp[i][j] = dp[i + 1][j + 1]
elif p[j] == "*":
dp[i][j] = dp[i][j + 1] or dp[i + 1][j] or dp[i + 1][j + 1]
else:
dp[i][j] = False
return dp[0][0]
assert Solution().isMatch("aa", "a") == False
assert Solution().isMatch("aa", "*") == True
assert Solution().isMatch("cb", "?a") == False