题目描述(困难难度)
解题思路
- 动态规划
- 前
i,j
能否匹配取决与前i-1、j-1
能否匹配 - dp[i][j]表示s1的前i个字符,和s2的前j个字符,能否匹配
*a*b
adceb
python 代码
class Solution:
def isMatch(self, s: str, p: str) -> bool:
m = len(s)+1
n = len(p)+1
dp = [[False]*n for _ in range(m)]
dp[0][0] = True
for i in range(1,n):
if p[i-1]=="*":
dp[0][i] = dp[0][i-1]
for i in range(1,m):
for j in range(1,n):
if p[j-1]==s[i-1] or p[j-1]=="?":
dp[i][j]=dp[i-1][j-1]
elif p[j-1]=="*":
# 匹配多次或0次
dp[i][j] = dp[i-1][j] or dp[i][j-1]
return dp[m-1][n-1]
s = Solution()
result = s.isMatch("adceb","*a*b")
print(result)