← [ BACK_TO_NOTES ]

DP 模板:最长公共子序列(LCS)

LCS 模板卡:双序列 DP 的状态定义、字符相等/不等转移与边界。

#algorithm #snippet #growing #dp

[!info] related notes 动态规划 网格 DP 与双序列 DP 最长公共子序列

DP 模板:最长公共子序列(LCS)

识别信号

  • 两个字符串 / 数组
  • 问最长公共子序列长度
  • 比较两个前缀

状态

dp[i][j] = s 的前 i 个字符与 t 的前 j 个字符的最长公共子序列长度

转移

if (s[i - 1] === t[j - 1])
    dp[i][j] = dp[i - 1][j - 1] + 1
else
    dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])

模板

for (let i = 1; i <= m; i++) {
    for (let j = 1; j <= n; j++) {
        if (s[i - 1] === t[j - 1]) {
            dp[i][j] = dp[i - 1][j - 1] + 1;
        } else {
            dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
        }
    }
}

边界

任意一个串为空时,答案是 0。

创建于 2026/3/18 更新于 2026/7/15
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本