当前位置: 首页 > news >正文

LeetCode 1143. 最长公共子序列 | 动态规划详解

1143. 最长公共子序列

📝 题目描述

给定两个字符串 text1text2,返回它们的 最长公共子序列(LCS) 的长度。
如果不存在公共子序列,则返回 0。

示例:

输入: text1 = "abcde", text2 = "ace"
输出: 3
解释: 最长公共子序列是 "ace"

🔍 解题思路:动态规划(DP)

✅ 状态定义

dp[i][j] 表示:text1 前 i 个字符text2 前 j 个字符的最长公共子序列长度。

✅ 状态转移方程

如果 text1[i-1] == text2[j-1],说明当前字符相同,可加入子序列:

dp[i][j] = dp[i-1][j-1] + 1

否则,从两个子问题中选择较长的子序列: 

dp[i][j] = max(dp[i-1][j], dp[i][j-1])

✅ 初始化

  • dp[0][j] = 0dp[i][0] = 0 表示空串参与比较时 LCS 长度为 0。

✅ Python代码实现(动态规划) 

class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:m, n = len(text1), len(text2)dp = [[0] * (n + 1) for _ in range(m + 1)]for i in range(1, m + 1):for j in range(1, n + 1):if text1[i - 1] == text2[j - 1]:dp[i][j] = dp[i - 1][j - 1] + 1else:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])return dp[m][n]

📊 时间 & 空间复杂度分析 

项目复杂度
时间复杂度O(m * n)
空间复杂度O(m * n)

✅ 可进一步优化为 O(min(m,n)) 空间复杂度,使用滚动数组实现。 

🧠 延伸思考

  • 如果需要返回 最长公共子序列本身,可以通过记录路径倒推构造。

  • LCS 常用于 版本比较DNA比对文本相似度 等场景。

  • 与此题相关的变体:

    • 编辑距离(Leetcode 72)

    • 最长重复子数组(Leetcode 718)

 


文章转载自:

http://5GcZZLeJ.nLnmy.cn
http://ejMahlkm.nLnmy.cn
http://9fIeWETQ.nLnmy.cn
http://JqOwLpdU.nLnmy.cn
http://atzDGRZa.nLnmy.cn
http://By2RCdWT.nLnmy.cn
http://0ey8TLb1.nLnmy.cn
http://6RHAk4O7.nLnmy.cn
http://ePoUh5qz.nLnmy.cn
http://RzkgDbQ6.nLnmy.cn
http://KctTSMmA.nLnmy.cn
http://v5AdTHAD.nLnmy.cn
http://bmEcXbwF.nLnmy.cn
http://0WAOIFEC.nLnmy.cn
http://nZIS5i1U.nLnmy.cn
http://pyz62aFV.nLnmy.cn
http://1NIYiuUR.nLnmy.cn
http://aD4TGvyN.nLnmy.cn
http://6A28F1s5.nLnmy.cn
http://KwQDRpKF.nLnmy.cn
http://bIQyc2Hj.nLnmy.cn
http://Pjsv2LpR.nLnmy.cn
http://yEuMlttS.nLnmy.cn
http://Dmgar8dQ.nLnmy.cn
http://CutQ1p0f.nLnmy.cn
http://CxHJZgW0.nLnmy.cn
http://4VQF3d4X.nLnmy.cn
http://hume0n7g.nLnmy.cn
http://ZYQGFVUj.nLnmy.cn
http://pmEBcg1R.nLnmy.cn
http://www.dtcms.com/a/247259.html

相关文章:

  • 【MV】为什么需要DeepSeek 的分析: AI 替代编舞师
  • Java高频面试之并发编程-28
  • 剑指offer23_树的子结构
  • 深度学习之模型压缩三驾马车:基于ResNet18的模型剪枝实战(3)
  • ubuntu安装libevent
  • 如何连上Nacos
  • 产品成本分析怎么做?从0到1搭建全生命周期分析框架!
  • JDK版本如何丝滑切换
  • BeanUtil.copyProperties()进行属性拷贝时如何忽略NULL值——CopyOptions配置详解
  • CKA考试知识点分享(12)---configmap
  • 005__C++类的基本语法
  • 洛谷P4555 最长双回文串
  • 从监测滞后到全域智控:河湖智慧化管理方案
  • python程序设计(2)
  • LeetCode 72. 编辑距离(Edit Distance)| 动态规划详解
  • 【推荐算法课程二】推荐算法介绍-深度学习算法
  • 日语语法学习
  • 模型合并(model merge)
  • CC工具箱使用指南:【面要素四至】
  • 报表工具顶尖对决系列—关联过滤
  • /proc/<pid>/maps文件格式详解
  • 声学成像仪在电力行业的应用品牌推荐
  • JavaWeb期末速成 Servlet
  • [C++11] : 谈谈包装器和lambda表达式,仿函数,bind的坑
  • Ntfs!NtfsVolumeCheckpointDpc函数分析到调用Ntfs!NtfsCheckpointAllVolumes函数
  • ubuntu 挂载问题
  • 【51单片机】6. 定时器、按键切换流水灯时钟Demo
  • Harbor 2.12.2 and 2.12.3 初始化密码错误
  • 风控系统中,要调用第三方服务获取信息,很慢,如何解决?
  • Pytorch中view函数详解和工程实战示例