通配符匹配
用自底向上的动态规划
从s为空字符开始,逐步判断p是否满足s
class Solution(object):
def isMatch(self, s, p):
"""
:type s: str
:type p: str
:rtype: bool
"""
l = [[False] * (len(p) + 1) for i in range(0, len(s) + 1)]
l[0][0] = True
i = 1
while i <= len(p):
l[0][i] = l[0][i -1] and p[i - 1] == "*"
i += 1
i = 1
j = 1
while i <= len(s):
j = 1
while j <= len(p):
if s[i - 1] == p[j - 1] or p[j - 1] == "?":
l[i][j] = l[i - 1][j - 1]
#出现*时,要么匹配,要么不匹配,两种情况满足一种即可
elif p[j - 1] == "*":
l[i][j] = l[i - 1][j] or l[i][j - 1]
else:
l[i][j] = False
j += 1
i += 1
return l[-1][-1]