一、题设
给定一个字符串 (s
) 和一个字符模式 (p
) ,实现一个支持 '?'
和 '*'
的通配符匹配。
'?' 可以匹配任何单个字符。 '*' 可以匹配任意字符串(包括空字符串)。
两个字符串完全匹配才算匹配成功。
二、基本思路
三、代码实现
def isMatch(self, s, p):
if set(p) == {'*'}:
return True
row = len(s)+1 #横轴长度
col = len(p)+1 #纵轴长度
dp = [[False]*row for _ in range(col)]
# 数组预处理
dp[0][0] = True
for i in range(1,col):
if p[i-1] != '*':
break
dp[i][0] = True
# i是p,j是s
for i in range(1,col):
for j in range(1,row):
if p[i-1] == '*':
dp[i][j] = i-1>=0 and j-1 >= 0 and (dp[i-1][j] or dp[i][j-1])
else:
dp[i][j] = i-1 >=0 and j-1 >= 0 and dp[i-1][j-1] and (p[i-1] == s[j-1] or p[i-1] == '?')
return dp[-1][-1]