本文主要是介绍算法训练营Day55(动态规划15),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
392.判断子序列 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
提醒
这道题目算是 编辑距离问题 的入门题目(毕竟这里只是涉及到减法),慢慢的,后面就要来解决真正的 编辑距离问题了
class Solution:def isSubsequence(self, s: str, t: str) -> bool:dp = [[0] * (len(t)+1) for _ in range(len(s)+1)]for i in range(1, len(s)+1):for j in range(1, len(t)+1):if s[i-1] == t[j-1]:dp[i][j] = dp[i-1][j-1] + 1else:dp[i][j] = dp[i][j-1]if dp[-1][-1] == len(s):return Truereturn False
思考
dp数组的定义,初始化,遍历顺序
115.不同的子序列 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
提醒
但相对于刚讲过 392.判断子序列,本题 就有难度了 ,感受一下本题和 392.判断子序列 的区别。
class Solution:def numDistinct(self, s: str, t: str) -> int:s_len, t_len = len(s), len(t)dp = [[0] * (t_len + 1) for _ in range(s_len + 1)]# 初始化列for i in range(s_len + 1):dp[i][0] = 1for i in range(1, s_len + 1):for j in range(1, t_len + 1):dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j] if s[i - 1] == t[j - 1] else dp[i - 1][j]return dp[-1][-1]
这篇关于算法训练营Day55(动态规划15)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!