DP算法
定义状态dp(lengh=len(s)+1))表示s中的每个字符是否被p中的前几个子字符所匹配
dp[0]用来表示p是否是以开头
状态转移:若p中下一个字符为‘’,则newdp[i]=newdp[i-1] or dp[i] 0<i<n
若p中下一个字符为’?’,则newdp = dp 0<i<n
若p中下一个字符为其他字符,则newdp[i] = dp[i] and s[i]==letter 0<i<n dp[i]
class Solution:
def isMatch(self, s, p):
l = len(s)
if len(p) - p.count('*') > l:
return False
dp = [True] + [False] * l
for letter in p:
new_dp = [dp[0] and letter == '*']
if letter == '*':
for j in range(l):
new_dp.append(new_dp[-1] or dp[j + 1])
elif letter == '?':
new_dp += dp[:l]
else:
new_dp += [dp[j] and s[j] == letter for j in range(l)]
print(new_dp)
dp = new_dp
return dp[-1]