news 2026/4/29 10:13:47

LeetCode热题--1143. 最长公共子序列--中等

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode热题--1143. 最长公共子序列--中等

题目

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。
两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

示例 1:
输入:text1 = “abcde”, text2 = “ace”
输出:3
解释:最长公共子序列是 “ace” ,它的长度为 3 。

示例 2:
输入:text1 = “abc”, text2 = “abc”
输出:3
解释:最长公共子序列是 “abc” ,它的长度为 3 。

示例 3:
输入:text1 = “abc”, text2 = “def”
输出:0
解释:两个字符串没有公共子序列,返回 0 。

题解

classSolution{publicintlongestCommonSubsequence(Stringtext1,Stringtext2){char[]t=text2.toCharArray();intm=t.length;int[]f=newint[m+1];for(charx:text1.toCharArray()){intpre=0;// f[0]for(intj=0;j<m;j++){inttmp=f[j+1];f[j+1]=x==t[j]?pre+1:Math.max(f[j+1],f[j]);pre=tmp;}}returnf[m];}}

解析

出自:教你一步步思考动态规划:从记忆化搜索到递推(Python/Java/C++/Go)

classSolution{publicintlongestCommonSubsequence(Stringtext1,Stringtext2){// 将 text2 转换为字符数组,便于快速访问每个字符char[]t=text2.toCharArray();// 获取 text2 的长度,记为 mintm=t.length;// 创建一维 DP 数组 f,长度为 m+1;f[j] 表示当前 text1 前缀与 text2[0..j-1] 的 LCS 长度// 初始时所有值为 0(因为未开始匹配)int[]f=newint[m+1];// 遍历 text1 中的每一个字符 xfor(charx:text1.toCharArray()){// pre 用于保存上一轮(即 text1 上一个字符处理时)的 f[j] 值,// 相当于二维 DP 中的 dp[i-1][j-1]intpre=0;// 对应 f[0],即空字符串与任意前缀的 LCS 长度为 0// 遍历 text2 的每个位置 j(从 0 到 m-1)for(intj=0;j<m;j++){// 先保存当前 f[j+1] 的旧值(即上一行的 dp[i-1][j+1]),// 因为它将在下一次循环中作为 "pre"(即 dp[i-1][j])使用inttmp=f[j+1];// 状态转移:// 如果当前字符 x == t[j],说明可以扩展 LCS:f[j+1] = pre + 1// 否则,取不包含 x 或不包含 t[j] 的最大值:max(f[j+1], f[j])f[j+1]=x==t[j]?pre+1:Math.max(f[j+1],f[j]);// 更新 pre 为 tmp(即上一行的 f[j+1]),供下一次 j 循环使用pre=tmp;}}// 最终结果存储在 f[m] 中,表示 text1 与整个 text2 的 LCS 长度returnf[m];}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 16:17:49

基于SpringBoot的可追溯果园生产过程管理系统(源码+lw+部署文档+讲解等)

课题介绍本课题聚焦果园生产标准化与产品溯源需求&#xff0c;设计并实现一套基于Spring Boot框架的可追溯果园生产过程管理系统&#xff0c;旨在破解传统果园生产中流程不规范、农事操作记录零散、投入品使用监管缺失、产品溯源困难等痛点问题&#xff0c;精准匹配果园管理者高…

作者头像 李华
网站建设 2026/4/24 17:09:39

探秘电芯自动贴顶边胶布机程序

该套程序是电芯自动贴顶边胶布机程序&#xff0c;总共有14个伺服电机&#xff0c;采用EtherCAT总线控制&#xff0c;4个CCD相机&#xff0c;贴胶采用视觉定位&#xff0c; PLC:基恩士KV-8000&#xff0c;伺服&#xff1a;松下A6总线型伺服&#xff0c;这是已经在量产的程序&…

作者头像 李华
网站建设 2026/4/19 15:33:27

基于SpringBoot的旅游出行指南系统(源码+lw+部署文档+讲解等)

课题介绍本课题聚焦旅游出行场景下精准指南服务与信息整合需求&#xff0c;设计并实现一套基于Spring Boot框架的旅游出行指南系统&#xff0c;旨在破解传统旅游出行中攻略信息分散、目的地信息不对称、行程规划低效、特色资源难挖掘等痛点问题&#xff0c;精准匹配游客便捷获取…

作者头像 李华
网站建设 2026/4/15 7:15:16

打开COMSOL看到电磁波模块就手痒?今天拿介质圆柱散射练练手。先搞个半径5μm的氧化铝圆柱(ε_r=9.8),扔到532nm激光里会发生啥?咱们边操作边唠嗑

COMSOL介质圆柱散射效率分析。 也可分析散射截面&#xff0c;消光截面与吸收截面。建模时直接在几何里画个圆&#xff0c;边界条件记得套两层&#xff1a;里面是散射边界&#xff08;别让波反射回来捣乱&#xff09;&#xff0c;外面包个完美匹配层。材料库调出氧化铝参数时注意…

作者头像 李华
网站建设 2026/4/28 11:29:58

当C#遇上工业PLC:手撕多品牌通讯源码实录

C#与三菱&#xff0c;西门子&#xff0c;台达&#xff0c;基恩士&#xff0c;等各品牌plc通讯源码。搞过工控的老铁都知道&#xff0c;PLC通讯就像和不同方言的人聊天——三菱说MC协议&#xff0c;西门子玩S7&#xff0c;台达可能掏出Modbus&#xff0c;基恩士说不定甩个自定义…

作者头像 李华