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为最优解

  • dp00 表示 S1 前 0 个字符 与 S2 前 0 个字符的 LCS = 0
  • dpi0 表示 S1 前 i 个字符 与 S2 前 0 个字符的 LCS = 0
  • dp0j 表示 S1 前 0 个字符 与 S2 前 j 个字符的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的课堂截图:

相关推荐
微三云生态系统架构师-彭丹4 小时前
排队免单资金池专户存管与返本算法:队列模型与熔断保护
算法·熔断机制·排队免单·消费增值·资金池·队列系统·返本算法
wzdark4 小时前
矩阵快速幂算法在图路径计算中的应用4
线性代数·算法·矩阵
Dylan的码园4 小时前
A+B问题 进制处理【逻辑控制 运算符】
c++·算法
空奈qwq5 小时前
ANN 全连接神经网络入门指南:从神经元到深度学习的第一步
人工智能·python·深度学习·神经网络·算法·机器学习
hetao17338375 小时前
2026-09-27~28 hetao1733837 的刷题记录
c++·算法
Godspeed Zhao5 小时前
现代智能雷达技术15——算法(1)
人工智能·算法·雷达
代码什么用5 小时前
LeetCode-42. 接雨水
算法·leetcode
lengxuenong5 小时前
枚举及其优化学习手册
c++·学习·算法·青少年编程
小O的算法实验室5 小时前
IEEE TAI,RoCo:基于角色的LLM协作实现自动启发式设计
算法
小范的技术工坊5 小时前
大模型蒸馏
人工智能·算法·数据挖掘·大模型