吮槌圯 发表于 2025-6-4 19:34:25

线性dp:最长公共子序列

最长公共子序列


[*]本文讲解的题与leetcode1143.最长公共子序列这题一样,阅读完可以挑战一下。
力扣题目链接
题目叙述:

给定两个字符串,输出其最长公共子序列,并输出它的长度
输入:

ADABEC和DBDCA输出:

DBC
3解释

最长公共子序列是DBC,其长度为3
动态规划思路:


[*]我们这题先构建一个模型,我们使用两个指针i,j ,分别用于遍历a字符串,b字符串。如图所示:


[*]然后我们可以设想一个状态变量,也就是一个函数。一个关于两个变量相关的函数,这在代码中体现为二维数组f。
[*]然后f表示什么呢?表示序列a和b的最长公共子序列的长度
状态变量的含义


[*]在这里的状态变量为f,它的含义是a的前i个字符与b的前j个字符的最长公共子序列的长度
[*]现在就要观察a,b是否在当前的最长公共子序列当中。
[*]具体情况如下图:

递推公式:


[*]f可以分为三种情况讨论,就是:

[*]a,b都在最长公共子序列当中,也就是a==b
[*]a!=b,并且a不在公共子序列当中。
[*]a!=b,并且b不在公共子序列当中。


[*]那我们的递推公式就可与分为两种情况:

[*]f=f+1 (a==b)
[*]f=max(f,f) (a!=b)

[*]显而易见,我们的边界条件为:

[*]f=0
[*]f=0

//m是a字符串的长度,n是b字符串的长度for(int i=1;i

高清宁 发表于 2025-10-27 10:55:42

感谢分享,下载保存了,貌似很强大

梳踟希 发表于 2025-11-20 03:39:34

这个好,看起来很实用

讹过畔 发表于 2025-12-15 17:24:01

感谢,下载保存了

赏勿 发表于 2026-1-2 11:53:38

感谢分享,下载保存了,貌似很强大

屠焘 发表于 2026-1-4 13:39:59

不错,里面软件多更新就更好了

吮槌圯 发表于 2026-1-6 12:03:38

这个好,看起来很实用

肿抢 发表于 2026-1-16 15:31:38

谢谢分享,试用一下

师悠逸 发表于 2026-1-18 02:11:44

收藏一下   不知道什么时候能用到

赊朗爆 发表于 2026-1-18 03:52:26

热心回复!

任静柔 发表于 2026-1-19 11:54:14

谢谢分享,辛苦了

梁丘艷蕙 发表于 2026-1-21 21:10:49

这个有用。

羊舌正清 发表于 2026-1-25 11:36:55

感谢,下载保存了

恙髡 发表于 2026-1-27 06:49:41

yyds。多谢分享

恶凝毛 发表于 2026-1-30 06:34:16

前排留名,哈哈哈

捐催制 发表于 2026-2-3 08:08:08

鼓励转贴优秀软件安全工具和文档!

驼娑 发表于 2026-2-5 07:44:20

东西不错很实用谢谢分享

佴莘莘 发表于 2026-2-7 04:24:01

感谢,下载保存了

骆贵 发表于 2026-2-9 03:17:22

谢谢分享,辛苦了

忌才砟 发表于 2026-2-9 07:15:26

感谢,下载保存了
页: [1] 2
查看完整版本: 线性dp:最长公共子序列