问题
solution
- DP[i,j] 表示 s[0…i] 与 p[0…j] 是否match(左闭右开)
- s[i-1]==p[j-1]:DP[i][j] = DP[i-1][j-1]
- p[j-1]=="?":DP[i][j] = DP[i-1][j-1]
- p[j-1]=="*":DP[i][j] = DP[i][j-1] or DP[i-1][j]
class Solution(object):
def isMatch(self, s, p):
#DP[i,j] 表示a[0..i]与a[0..j] 是否match
DP = [[False]*(len(p)+1) for _ in range(len(s)+1)]
DP[0][0] = True
for i in range(1,len(p)+1):
if(p[i-1]=="*"):
DP[0][i]= DP[0][i-1]
for i in range(1,len(s)+1):
for j in range(1,len(p)+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][j-1] or DP[i-1][j]
else:
DP[i][j]=False
# print(DP)
return DP[-1][-1]