题目描述(困难难度)
解题思路
当p[j-1]="*"
时,有三种情况:
匹配多个
p=cvdbna*
s=cvdbnaaa
匹配一个
p=cvdbaa*
s=cvdbaa
匹配0个
p=cvdbaa*
s=cvdba
python 代码
class Solution:
def isMatch(self, s: str, p: str) -> bool:
dp = []
m = len(s)+1
n = len(p)+1
dp = [[False]*(n) for _ in range(m)]
dp[0][0]=True
for i in range(2,n):
if p[i-1] == "*":
dp[0][i] = dp[0][i-2]
for i in range(1,m):
for j in range(1,n):
if s[i-1] == p[j-1] or p[j-1] == ".":
dp[i][j] = dp[i-1][j-1]
elif p[j-1]=="*":
if s[i-1] == p[j-2] or p[j-2] == ".":
# *代表可以匹配多个,1个,0个
dp[i][j] = dp[i-1][j] or dp[i][j-1] or dp[i][j-2]
else:
dp[i][j] = dp[i][j-2]
return dp[m-1][n-1]
s = Solution()
res = s.isMatch('aa','a*')
print(res)