记忆化搜索递归
class Solution:
def numDistinct(self, s: str, t: str) -> int:
# 每一次递归的逻辑:
# (1) 字符串的尾部相等的情况,s[i] = s[j]
# xxxxxs
# kkkks
# dfs(i)(j) = dfs(i-1)(j) + dfs(i-1)(j-1)
# (2) 字符串尾部不相等的情况
# xxxxx1
# kkkk2
# dfs(i)(j) = dfs(i-1)(j)
# 初始化缓存
arr = [[-1] * len(t) for _ in range(len(s))]
def dfs(i, j):
if j == -1:
return 1
if i == -1:
return 0
if arr[i][j] != -1:
return arr[i][j]
if s[i] == t[j]:
arr[i][j] = dfs(i - 1, j) + dfs(i - 1, j - 1)
else:
arr[i][j] = dfs(i - 1, j)
return arr[i][j]
return dfs(len(s) - 1, len(t) - 1)

动态规划
class Solution:
def numDistinct(self, s: str, t: str) -> int:
# 每一次递归的逻辑:
# (1) 字符串的尾部相等的情况,s[i] = s[j]
# xxxxxs
# kkkks
# dfs(i)(j) = dfs(i-1)(j) + dfs(i-1)(j-1)
# (2) 字符串尾部不相等的情况
# xxxxx1
# kkkk2
# dfs(i)(j) = dfs(i-1)(j)
# 初始化动态规划数组
dp = [[0] * (len(t)+1) for _ in range(len(s)+1)]
for i in range(len(s)+1):
for j in range(len(t)+1):
if j == 0:
dp[i][j] = 1
elif i == 0:
dp[i][j] = 0
elif s[i-1] != t[j-1]:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = dp[i-1][j] + dp[i-1][j-1]
return dp[len(s)][len(t)]

小黑生活
面试被面试官指出计算机基础不行,需要把期望薪资进一步降低,让小黑意识到这几年路有些走偏,心有些浮躁,晚饭手撕拉面


小黑在实习中受到内存限制,第一次尝试用了新的方法优化,奏效!!得到信心


晚上独自想吃个麻辣烫,但是没开门,于是独自吃串喝闷酒







早餐麦当劳


通勤+读英语


午饭疯狂星期四




来个麦当劳圆筒

咖啡曲奇动态规划算法


被折叠的 条评论
为什么被折叠?



