动态规划法(小黑看完答案理解了以后写出)
class Solution:
def isMatch(self, s: str, p: str) -> bool:
# 模式串与匹配串长度
n_p = len(p)
n_s = len(s)
if not (n_p or n_s):
return False
# 动态规划数组
dp = [[False] * (n_p+1) for _ in range(n_s+1)]
dp[0][0] = True
# 初始化动态规划数组,匹配模式串中的若干个.*为开头
for i in range(2, n_p+1):
if p[i-1] == '*':
dp[0][i] = dp[0][i-2]
# 开始进行动态规划
for i in range(1, n_s+1):
for j in range(1, n_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] == '*':
# *前的字符与匹配串末端相等
if s[i-1] == p[j-2] or p[j-2] == '.':
# .*匹配0个1个多个
dp[i][j] = dp[i][j-2] or dp[i-1][j-1] or dp[i-1][j]
else:
dp[i][j] = dp[i][j-2]
return dp[n_s][n_p]
小黑生活
起床,准备坐地铁去领物资,桐山站上地铁
到达元通地铁站
去领物资
准备骑共享单车去吃鸭血粉丝汤
来杯茶百道
前往长江边上
骑车前往雨花台景区![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e6c705dbecef43528415f133691f4f3b.png)
到达雨花台景区,祭奠先烈
骑车前往中华门城墙
去城墙上漫步