leetCode 1143.最长公共子序列 动态规划 + 图解

此题我的往期文章推荐:

leetCode 1143.最长公共子序列 动态规划 + 滚动数组-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/133689692?spm=1001.2014.3001.5501leetCode 1143.最长公共子序列 一步步思考动态规划 + 优化空间复杂度_呵呵哒( ̄▽ ̄)"的博客-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/133702506?spm=1001.2014.3001.5501

(1)S1 和 S2末尾字符相同时,那就在 S1前 i-1个字符 与 S2前 j-1个字符 的LCS基础上再加1

(2)S1 和 S2末尾字符不相同时,两种选择方案:

  • 把S1的末尾字符抛弃掉,计算在 S1前 i-1个字符 与 S2前 j 个字符 的LCS
  • 把S2的末尾字符抛弃掉,计算在 S1前 i个字符 与 S2前 j-1 个字符 的LCS

比较这两个LCS谁最大,就选最大的LCS为最优解

  • dp[0][0] 表示 S10 个字符 与 S20 个字符的 LCS = 0
  • dp[i][0] 表示 S1i 个字符 与 S20 个字符的 LCS = 0
  • dp[0][j] 表示 S10 个字符 与 S2j 个字符的LCS = 0
  • S1:A B C B D A B
  • S2:B D C A B C

我们可以从这张表格可以得到的信息,S1 与 S2 的 最长公共子序列长度为 4且最长公共子序列有"BCAB" 和 "BDAB",如下验证:

① 最长公共子序列有"BCAB"

  • S1:A B C B D A B
  • S2:B D C A BC

② 最长公共子序列有"BDAB"

  • S1:A B C B D A B
  • S2:B D C A B C

伪代码:

可以在力扣运行的代码我在这往期文章里已经写了,大家可以移步去看!!!文章链接在此文的首行~

参考B站up主邋遢大哥233做的课堂笔记:

[轻松掌握动态规划]5.最长公共子序列 LCS_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1ey4y1d7oD/?spm_id_from=333.999.0.0&vd_source=a934d7fc6f47698a29dac90a922ba5a3来自up主邋遢大哥233的课堂截图:

相关推荐
OTWOL18 分钟前
【C++编程入门基础(一)】
c++·算法
谏君之24 分钟前
C语言实现的常见算法示例
c语言·算法·排序算法
机器视觉知识推荐、就业指导1 小时前
【数字图像处理二】图像增强与空域处理
图像处理·人工智能·经验分享·算法·计算机视觉
IT猿手2 小时前
超多目标优化:基于导航变量的多目标粒子群优化算法(NMOPSO)的无人机三维路径规划,MATLAB代码
人工智能·算法·机器学习·matlab·无人机
Erik_LinX2 小时前
算法日记25:01背包(DFS->记忆化搜索->倒叙DP->顺序DP->空间优化)
算法·深度优先
Alidme2 小时前
cs106x-lecture14(Autumn 2017)-SPL实现
c++·学习·算法·codestepbystep·cs106x
小王努力学编程2 小时前
【算法与数据结构】单调队列
数据结构·c++·学习·算法·leetcode
最遥远的瞬间2 小时前
15-贪心算法
算法·贪心算法
维齐洛波奇特利(male)3 小时前
(动态规划 完全背包 **)leetcode279完全平方数
算法·动态规划
项目申报小狂人4 小时前
改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)
开发语言·算法·matlab