小黑独立做出一道困难题,继续开启力扣之旅,干就完了
小黑代码
class Solution:
def isMatch(self, s: str, p: str) -> bool:
# 字符串和模式串长度
len_s = len(s)
len_p = len(p)
# 初始化动态规划数组
dp = [[False]*(len(s)+1) for _ in range(len_p+1)]
dp[0][0] = True
# 开始动态规划操作
for i in range(1, len_p+1):
for j in range(len_s+1):
# 末端字符匹配的情况下(保证j>0)
if j and (p[i-1] == s[j-1] or p[i-1] == '?'):
dp[i][j] = dp[i-1][j-1]
# 模式串带*
elif p[i-1] == '*':
# 考虑p: (xx*) 与s: (xx)的情况
dp[i][j] = dp[i-1][j]
# j>0需考虑比较p: (xx)*与s: (xx)a的括号里的内容
if j:
dp[i][j] = dp[i-1][j-1] or dp[i][j-1] or dp[i][j]
return dp[len_p][len_s]
动态规划
class Solution:
def isMatch(self, s: str, p: str) -> bool:
# 模式串与字符串长度
len_s = len(s)
len_p = len(p)
# 初始化动态规划数组
dp = [[False] * (len_s+1) for _ in range(len_p+1)]
# 初始值
dp[0][0] = True
# 模式串以一个或者多个“*”为开头,可以匹配空字符(数组对应为True)
for t in range(len_p):
if p[t] != '*':
break
dp[t+1][0] = True
# 开始动态规划
for i in range(1, len_p+1):
for j in range(1, len_s+1):
# 模式串的末端字符为*
if p[i-1] == '*':
dp[i][j] = dp[i-1][j] or dp[i][j-1] or dp[i-1][j-1]
# 相等或者模式串末端为'?'
elif p[i-1] == s[j-1] or p[i-1] == '?':
dp[i][j] = dp[i-1][j-1]
return dp[len_p][len_s]
贪心匹配
class Solution:
def isMatch(self, s: str, p: str) -> bool:
# 字符匹配函数
def match(s_c, p_c):
if s_c == p_c or p_c == '?':
return True
return False
# 匹配结尾,直到碰到p中为*
sRight = len(s)
pRight = len(p)
# 将p变成xxxx*xxx*xx*的情况
while pRight > 0 and p[pRight-1] != '*':
# 不匹配的情况,或者是s已经匹配到头而p还有
if sRight == 0 or (not match(s[sRight-1], p[pRight-1])):
return False
sRight -= 1
pRight -= 1
# p已经变成xxxx*xxx*xx*的形式
pRecord = -1
sRecord = -1
pIndex = 0
sIndex = 0
while pIndex < pRight and sIndex < sRight:
# p碰到了*,开始在s中匹配下一个子序列
if p[pIndex] == '*':
pIndex += 1
pRecord = pIndex
sRecord = sIndex
# 匹配的情况,指针同时往前走
elif match(s[sIndex], p[pIndex]):
pIndex += 1
sIndex += 1
# 如果不匹配,重新匹配p中的当前子序列
elif pRecord!=-1 and sRecord+1 < sRight:
sRecord += 1
sIndex = sRecord
pIndex = pRecord
else:
return False
# p已经匹配完,而s没有匹配完
if pRight==0 and sRight!=0:
return False
# s匹配完,p没匹配完,判断是否只剩下*
for i in range(pIndex, pRight):
if p[i] != '*':
return False
return True
小黑生活
准备去考科二
科二通过,等回去的班车,咖啡厅里刷刷题
东方时尚驾校环境
回去吃个凉菜和牛肉面
科二满分
来罐可乐
跟呆呆去跑步
早餐干饭
年后上班第一天
午餐干饭
晚餐干饭
肩颈舒展瑜伽课
晚间跑步
早餐干饭
简单学学强化学习
午餐干饭
餐后来个牛奶
午后喜茶遛弯
麦当劳晚饭
瑜伽肩颈理疗
麦当劳早餐
南二环团跑
跑后喜茶
南二环团照
化一块牛肉
肩颈舒展团课
去大黑驴出租屋子里吃大黑驴做的饭,真不错
麦当劳早餐
钢琴学习C大调音阶
学完钢琴跑回家
整块牛排
两节瑜伽课打卡
早餐干饭
应届生同事从重庆带来的底料
午餐干饭
午后喜茶
晚餐干饭
没吃饱,再来个板烧
精准正位瑜伽课打卡
G大调音阶打卡
随身wifi又连不上了,绝望
晚间跑步
买了从西站到大兴机场的高铁,准备去长沙
早餐干饭
午餐干饭
午后喜茶散步
申请出京,要挨批了
晚餐干饭
腰腹塑性团课
晚间跑步
辣酱到了
洗面奶到了
呷哺麻酱到了,涮个肉吃
早餐干饭
行使投票权
午餐干饭
午休河边溜溜
开始Vue学习
晚餐干饭