题目:
给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。
- ‘?’ 可以匹配任何单个字符。
- ‘*’ 可以匹配任意字符串(包括空字符串)。
两个字符串完全匹配才算匹配成功。
说明:
- s 可能为空,且只包含从 a-z 的小写字母。
- p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。
解答:
class Solution:
def isMatch(self, s: str, p: str) -> bool:
#dp[i][j] 表示字符串 s 的前 i 个字符和模式 p 的前 j 个字符是否能匹配
m=len(s)
n=len(p)
dp=[[False]*(n+1) for _ in range(m+1)]
#对dp进行初始化
dp[0][0]=True
#dp[i][0](i>0):恒为False
#dp[0][j]:
for j in range(n):
if p[j]=='*':
dp[0][j+1]=True
else:
break
for i in range(1,m+1):
for j in range(1,n+1):
if (s[i-1]==p[j-1]) or p[j-1]=='?' :
dp[i][j]=dp[i-1][j-1]
elif p[j-1]=='*':
#要么使用*,要么不使用
dp[i][j]=dp[i-1][j] or dp[i][j-1]
return dp[m][n]