关于动态规划【力扣1143.最长公共子序列的思考】

1、与前几题的区别

【力扣300.最长递增子序列】一个数组,不连续

【力扣674.最长连续递增子序列】一个数组,连续

【力扣718.最长重复子数组】两个数组,连续

【力扣1143.最长公共子序列】两个数组,不连续

(本题是求两个数组不连续的最长公共子序列的长度)

整体代码如下图所示

2、递推公式

本题与上一题的关键区别在于要求两个数组"不连续"的最长公共子序列的长度。当前位置dpij的状态来自三个方向。

(因为要求不连续的,所以只要有一样的就可以把状态转移给下一个)

【本题】递推公式部分的代码如下图所示

【上一题】要求的是连续的,当前位置dpij的状态来自一个方向:左上角。

(因为要求连续的所以必须前一个是连续的,才可以把状态转移给下一个。如果前一个不一样,当前的一样,就要重新开始计算)

递推公式部分的代码如下图所示

3、返回值

dp数组里的每个值,要么从左上角加1得到,要么是上方或左方元素的最大值,所以最大值一定出现在右下角,所以返回dptext1.size()text2.size()就好。

(dptext1.size()text2.size()表示以text1.size()-1和text2.size()-1为结尾的最长公共子序列的长度)

相关推荐
布莱克6059 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
D e re k ZH12 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
石小石Orz13 小时前
AI 正在蚕食我们的编码能力
前端·后端·算法
民乐团扒谱机14 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
青少儿编程课堂14 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
文丑颜不良啊15 小时前
LeetCode2261~2280题目解析
java·leetcode
武子康16 小时前
Qwen-Drive 到底是什么:4B 级 VLM 如何成为驾驶策略底座
人工智能·算法·机器学习
zh_xuan18 小时前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
机 _ 长18 小时前
05 智算运维|8 张卡怎么才算「捆成一张」:NCCL 实测与拓扑
运维·人工智能·算法·智算运维