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

力扣HOT(100)54多维动态规划-最长公共子序列

动态规划核心思路(一句话讲透)

用二维数组dp[i][j]表示:text1 的前 i 个字符 和 text2 的前 j 个字符 的最长公共子序列的长度。i表示的是第几个。所以下面的索引就是i-1

我们只需要考虑两种情况:

  1. 如果 text1 的第 i 个字符 == text2 的第 j 个字符: 这个字符可以加入公共子序列,所以dp[i][j] = dp[i-1][j-1] + 1(前面 i-1 和 j-1 个字符的最长公共子序列,加上这个新的公共字符)
  2. 如果两个字符不相等: 最长公共子序列要么不包含 text1 的第 i 个字符,要么不包含 text2 的第 j 个字符,取两者的最大值 所以dp[i][j] = max(dp[i-1][j], dp[i][j-1])

完整解题步骤

1. 初始化 dp 数组

  • 数组大小:(m+1) × (n+1),其中 m 是 text1 的长度,n 是 text2 的长度
  • 为什么要 + 1?因为我们要表示前 0 个字符(空字符串)的情况
  • 边界条件:
    • dp[0][j] = 0:空字符串和任何字符串的公共子序列长度都是 0
    • dp[i][0] = 0:任何字符串和空字符串的公共子序列长度都是 0

2. 遍历计算 dp 数组

  • 外层循环:i 从 1 到 m(遍历 text1 的每个字符)
  • 内层循环:j 从 1 到 n(遍历 text2 的每个字符)
    • 如果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])

3. 返回结果

dp[m][n]就是两个完整字符串的最长公共子序列的长度。

class Solution { public: int longestCommonSubsequence(string text1, string text2) { int m = text1.size(); int n = text2.size(); //初始化dp数组: vector<vector<int>> dp(m+1,vector<int>(n+1,0)); //初始化 一共m+1行 n+1列.因为考虑前0行 所以要加1个 //遍历text1 for(int i = 1;i<=m;i++){ //遍历text2 for(int j = 1;j<=n;j++){ if(text1[i-1] == text2[j-1]){ dp[i][j] = dp[i-1][j-1] + 1; } else{ dp[i][j] = max(dp[i-1][j],dp[i][j-1]); } } } return dp[m][n]; } };
http://www.cnnetsun.cn/news/2802424.html

相关文章:

  • 跟我一起学“仓颉Web”基础编程-图书管理Demo
  • 从笛卡尔到‘玩偶屋研究’:程序员如何用哲学思维提升技术文档写作?
  • Volga特征服务在EKS上的延迟压测与可扩展性实战
  • 从Jupyter到Kubernetes:机器学习模型服务化落地全链路
  • 深入DPDK l3fwd源码:手把手教你修改默认路由规则,定制自己的转发逻辑
  • Element UI弹窗实战:从‘顶部弹出’到‘优雅居中’,一个属性+一段CSS的完整改造流程
  • 告别开关!用Arduino Uno和APDS9930手势传感器做个挥手控灯(附完整代码与接线图)
  • 别再死记硬背switch了!通过‘简单计算器’案例,聊聊C++条件分支的选择策略与代码可读性
  • Wagmi 前端 Web3 库底层原理:基于 Viem 的钱包连接、Provider 单例管理与以太坊交易状态链路追踪
  • 【OpenClaw Skill 功能全解】,从文档处理到系统运维一站式(包含安装包)
  • 超越传统玻璃:元表面透镜 (Metalens) 如何重塑光学未来?
  • 别再让MinIO图片变下载!手把手教你用S3 Browser配置预览(附Java代码)
  • Roblox Studio新手避坑指南:从界面布局到资源上传,一次讲清那些没人告诉你的细节
  • 随机邻居嵌入
  • 深入CN3905规格书:除了Pin to Pin替代,它的低EMI和打嗝模式保护到底怎么用?
  • 机器学习模型生产化落地:从Jupyter到高可用服务的实战体系
  • 不止于升级:用HC32F460的Bootloader实现参数存储与固件下载的完整方案
  • 别再让模型‘偏科’了:用PyTorch实战搞定长尾数据分类(以CIFAR-100-LT为例)
  • 对话失败不是Bug,是用户认知的X光片
  • ACE框架:临床AI如何实现自主时序推理与动态知识进化
  • 不止是玩具:用Roblox Studio资源管理器高效管理你的游戏素材(图片、音频、模型全攻略)
  • 多标签分类本质:标签共现建模与评估体系重构
  • Halcon模板匹配实战:如何把辛苦训练的模型存下来,下次直接用?
  • Mythos:首个实现自主攻防闭环的AI漏洞挖掘模型
  • 2026年Java工程师必修:Spring Boot生产级能力全景图
  • 多维聚合实战:用Python构建可钻取数据立方体
  • SAP ABAP小技巧:用ALSM_EXCEL_TO_INTERNAL_TABLE函数实现SM30数据导入(含完整代码)
  • 本地大模型对话系统:CPU离线运行的轻量级LLaMA-GPT4All实战指南
  • 告别手动转存!用LabVIEW报表工具包直接读写.xlsx文件(支持中文)
  • 【紧急预警】CSDN AI选题功能开放行业词自定义!但92%运营人忽略这3个合规阈值与2个审核熔断点