当前位置: 首页 > news >正文

网站推广软件免费版WordPress 扫码支付跳转

网站推广软件免费版,WordPress 扫码支付跳转,个体户能否从事网站建设,c++编程软件LeetCode-1143. 最长公共子序列【字符串 动态规划】 题目描述#xff1a;解题思路一#xff1a;动规五部曲解题思路二#xff1a;1维DP解题思路三#xff1a;0 题目描述#xff1a; 给定两个字符串 text1 和 text2#xff0c;返回这两个字符串的最长 公共子序列 的长度。… LeetCode-1143. 最长公共子序列【字符串 动态规划】 题目描述解题思路一动规五部曲解题思路二1维DP解题思路三0 题目描述 给定两个字符串 text1 和 text2返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 返回 0 。 一个字符串的 子序列 是指这样一个新的字符串它是由原字符串在不改变字符的相对顺序的情况下删除某些字符也可以不删除任何字符后组成的新字符串。 例如“ace” 是 “abcde” 的子序列但 “aec” 不是 “abcde” 的子序列。 两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。 示例 1 输入text1 “abcde”, text2 “ace” 输出3 解释最长公共子序列是 “ace” 它的长度为 3 。 示例 2 输入text1 “abc”, text2 “abc” 输出3 解释最长公共子序列是 “abc” 它的长度为 3 。 示例 3 输入text1 “abc”, text2 “def” 输出0 解释两个字符串没有公共子序列返回 0 。 提示 1 text1.length, text2.length 1000 text1 和 text2 仅由小写英文字符组成。 解题思路一动规五部曲 确定dp数组dp table以及下标的含义 dp[i][j]长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j] 有同学会问为什么要定义长度为[0, i - 1]的字符串text1定义为长度为[0, i]的字符串text1不香么 这样定义是为了后面代码实现方便如果非要定义为长度为[0, i]的字符串text1也可以我在 动态规划718. 最长重复子数组 (opens new window)中的「拓展」里 详细讲解了区别所在其实就是简化了dp数组第一行和第一列的初始化逻辑。 确定递推公式 主要就是两大情况 text1[i - 1] 与 text2[j - 1]相同text1[i - 1] 与 text2[j - 1]不相同 如果text1[i - 1] 与 text2[j - 1]相同那么找到了一个公共元素所以dp[i][j] dp[i - 1][j - 1] 1; 如果text1[i - 1] 与 text2[j - 1]不相同那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列取最大的。 即dp[i][j] max(dp[i - 1][j], dp[i][j - 1]); dp数组如何初始化 先看看dp[i][0]应该是多少呢 test1[0, i-1]和空串的最长公共子序列自然是0所以dp[i][0] 0; 同理dp[0][j]也是0。 其他下标都是随着递推公式逐步覆盖初始为多少都可以那么就统一初始为0。 确定遍历顺序 从递推公式可以看出有三个方向可以推出dp[i][j]如图 那么为了在递推的过程中这三个方向都是经过计算的数值所以要从前向后从上到下来遍历这个矩阵。 举例推导dp数组 以输入text1 “abcde”, text2 “ace” 为例dp状态如图 最后红框dp[text1.size()][text2.size()]为最终结果 class Solution:def longestCommonSubsequence(self, text1: str, text2: str) - int:# 创建一个二维数组 dp用于存储最长公共子序列的长度dp [[0] * (len(text2) 1) for _ in range(len(text1) 1)]# 遍历 text1 和 text2填充 dp 数组for i in range(1, len(text1) 1):for j in range(1, len(text2) 1):if text1[i - 1] text2[j - 1]:# 如果 text1[i-1] 和 text2[j-1] 相等则当前位置的最长公共子序列长度为左上角位置的值加一dp[i][j] dp[i - 1][j - 1] 1else:# 如果 text1[i-1] 和 text2[j-1] 不相等则当前位置的最长公共子序列长度为上方或左方的较大值dp[i][j] max(dp[i - 1][j], dp[i][j - 1])# 返回最长公共子序列的长度return dp[len(text1)][len(text2)]# 同意 class Solution:def longestCommonSubsequence(self, text1: str, text2: str) - int:m, n len(text1), len(text2)dp [[0] * (n1) for _ in range(m1)]for i in range(1, m1):for j in range(1, n1):if text1[i-1] ! text2[j-1]:dp[i][j] max(dp[i-1][j], dp[i][j-1])else:dp[i][j] dp[i-1][j-1] 1return dp[-1][-1]时间复杂度O(nm) 空间复杂度O(nm) 解题思路二1维DP class Solution:def longestCommonSubsequence(self, text1: str, text2: str) - int:m, n len(text1), len(text2)dp [0] * (n 1) # 初始化一维DP数组for i in range(1, m 1):prev 0 # 保存上一个位置的最长公共子序列长度for j in range(1, n 1):curr dp[j] # 保存当前位置的最长公共子序列长度if text1[i - 1] text2[j - 1]:# 如果当前字符相等则最长公共子序列长度加一dp[j] prev 1else:# 如果当前字符不相等则选择保留前一个位置的最长公共子序列长度中的较大值dp[j] max(dp[j], dp[j - 1])prev curr # 更新上一个位置的最长公共子序列长度return dp[n] # 返回最后一个位置的最长公共子序列长度作为结果时间复杂度O(nm) 空间复杂度O(n) 解题思路三0 时间复杂度O(n) 空间复杂度O(n)
http://www.w-s-a.com/news/945578/

相关文章:

  • 怎么优化一个网站搭建网站免费空间
  • 山东建设和城乡建设厅注册中心网站首页wordpress安装教材
  • 个人风采网站制作毕节网站开发公司电话
  • 网络网站销售设计主题和设计理念
  • 做网站一般用什么服务器承德专业做网站
  • 松北区建设局网站网站建设分为几种
  • 网站建设的合同 体会智联招聘网站建设情况
  • 记的网站域名wordpress地方信息主题
  • 淄博好的建网站公司网站建设 海口
  • 有人做网站花了10几万2017做啥网站能致富
  • 做网站有什么软件cod建站平台
  • 合肥学校网站建设怎么做免费的产品图片网站
  • 营养早餐网站的设计与制作建设通网站怎么查项目经理在建
  • 浑南区建设局网站永州网站建设公司推荐
  • 做外贸都得有网站吗绵阳网站建设制作
  • 功能性的网站建设北京餐饮品牌设计公司
  • php做网站优势视频直播软件
  • 怎么安装php网站哪个网站是专门为建设方服务的
  • 重慶网站开发sina app engine wordpress
  • wampserver网站开发步骤中冠工程管理咨询有限公司
  • 自己做网站商城需要营业执照吗老外做牛排的视频网站
  • 网站推广效果的评估指标主要包括公司广告推广
  • 昆明网站建设那家好哪个网站学做凉皮
  • hype做网站动效哪里有给网站做
  • 打扑克网站推广软件设计类专业哪个最好
  • 网站设计首页网站建设意向书
  • 做网站要学那些angularjs后台管理系统网站
  • 广州白云手机网站建设学做点心上哪个网站
  • 哈尔滨网站建设步骤百度青岛代理公司
  • 怎么利用代码做网站军队 网站备案