LeetCode 1143. 最长公共子序列

LeetCode第1143题最长公共子序列 题目来源 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。 若这两个字符串没有公共子序列,则返回 0。 示例 1: 输入:text1 = “abcde”, text2 = 阅读详情

给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。
一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。
例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。
若这两个字符串没有公共子序列,则返回 0。

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

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

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

提示:
1 <= text1.length <= 1000
1 <= text2.length <= 1000
输入的字符串只含有小写英文字符。

思路

还是用动态规划的老套路来解。这里的状态有两个,分别是只考虑text1的前i个字符和只考虑text2的前j个字符。建立二维的dp数组dp[i][j],表示在只考虑text1的前i个字符和text2的前j个字符的情况下,最长公共子序列(LCS)的长度。

初始值:当其中某个序列只考虑前0个字符时,即有一个或两个序列一个字符都不考虑时,是不可能有公共子序列的。所以dp[0][*]和dp[*][0]都为0。

状态转移方程:每次都是这里最难想,这次依旧没想出来该怎么写。按照以往问题的思路,dp[i][j]的状态一定与前面的dp有关。这样思考:在只考虑text1的前i个字符、text2的前j个字符的前提下,当我比较text1的第i个字符和text2的第j个字符时(这里i和j视作从1开始),若两者相等,那么这个字符必定是公共子序列LCS中的元素,此时dp[i][j]的值就是在只考虑text1的前i-1个字符、text2的前j-1个字符的前提下的公共子序列数+1,即dp[i][j] = dp[i - 1][j - 1] + 1;若二者不相等,则text1[i]和text2[j]至少有一个不在LCS中。这时候要么其中的某1个字符在LCS中,此时会获得更长的LCS,要么任何一个字符都不在LCS中,此时不会获得更长的LCS。所以此时需要分别尝试假设text1[i]和text2[j]在LCS中,看哪个的LCS的长度更长,即将dp[i][j]设为LCS更长的值。此时的状态转移方程为:
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]),dp[i - 1][j]和dp[i][j - 1]分别表示只假设text2[j]或text1[i]在LCS中的情况。若此时dp[i - 1][j]和dp[i][j - 1]中二者值相等,则说明当前比较的text1[i]和text2[j]都不在只考虑text1的前i个字符和text2的前j个字符的前提下的LCS中;若一大一小,说明大的那个所取的字符在LCS中。

解答

class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        int m = text1.length();
        int n = text2.length();
        vector<vector<int> > dp(m + 1,vector<int>(n + 1, 0));

        for(int i = 1;i <= m;++ i)
            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];
    }
};

例子

举例:
text1 = “abcde”
text2 = “ace”
在这里插入图片描述
代码执行过程:

在这里插入图片描述

推荐系统(1):推荐系统评测 对于可以离线优化的指标,我个人的看法是应该在给定覆盖率、多样性、新颖性等限制条件下,尽量优化预测准确度。用一个数学公式表达,离线实验的优化目标是:最大化预测准确度使得 覆盖率 > A多样性 > B新颖性 > C其中,A、B、C的取值应该视不同的应用而定。 阅读详情

相关推荐

【Apollo规划模块探秘】—— 场景(Scenario)驱动的决策引擎

本文深入解析了Apollo自动驾驶平台规划模块的核心机制——场景(Scenario)驱动的决策引擎。文章通过类比日常驾驶,阐述了规划模块如何像经验丰富的司机一样,根据不同的路况(如车道跟随、无保护左转)切换不同的“驾驶模式”。重点剖析了场景管理器(ScenarioManager)如何基于感知信息进行场景判断与切换,以及“场景-阶段-任务”双层状态机如何精密协作,实现灵活、高效且安全的轨迹规划。

rnn9storyteller的博客 278

Practice Leetcode 1143. 最长公共子序列

给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。 若这两个字符串没有公共子序列,则返回 0。 示例 1: 输入:text1 = “abcde”, text2 = “ace”

刘烟火的博客 309

避坑指南:OpenWRT改AP模式必做的5个关键设置(DHCP/防火墙/WAN口处理)

本文详细解析了将OpenWRT设备从路由模式切换为AP模式时,必须完成的五个关键设置步骤。核心在于理解AP模式本质是带无线的智能交换机,需彻底关闭DHCP服务、调整防火墙策略、正确桥接所有物理接口(包括WAN口处理),并集成无线网络,以确保设备能透明接入主路由网络,避免出现设备隔离或无法互访等常见问题。

t1u2v的博客 733

机器学习实战笔记4(朴素贝叶斯)

前面介绍的kNN和决策树都给出了“该数据实例属于哪一类”这类问题的明确答案,而有时候的分类并不能给出明确的答案,本节讲解使用概率论进行分类的方法。 1:简单概念描述 概念比较简单,这里我摘抄自百度百科,很容易理解。 朴素贝叶斯模型(NaiveBayesian classification)): ---- Vmap=arg max P( Vj | a1,a2...an) Vj属于V集合

小村长技术blog 9891

RS485信号测量避坑指南:示波器抓包常见问题与波形分析技巧

本文详细解析了RS485信号测量中的常见问题与解决方案,包括差分信号测量基础、终端电阻配置、共模干扰处理等关键技巧。通过实测波形案例和优化建议,帮助工程师有效提升RS485通信的可靠性和抗干扰能力,适用于工业自动化、远程监测等场景。

kappa的博客 615

GAMES101学习-第8课进行shader的初步了解

详细理解课上展示的像素着色器GLSL,以及了解了API、OpenGL、DirectX到底是什么,还有shadertoy这个网站的初步探索。

qq_41835314的博客 1917

Python3内置函数

Python Standard Library based on Python 3.7.3 https://docs.python.org/3/library/ Python标准库 - 内置函数 Link: https://docs.python.org/3/library/functions.html 说明 print 后的 # 注释为输出和相关说明,包含所有 Python3....

墨1024 369

Adams与matlab联合仿真的一些小技巧

Adams与simulink联合仿真之快速设置初值 去年到现在一直做的两个项目要用到Adams与simulnk联合仿真,虽然网上有很多这方面的教程,但都比较基本,要实现一些稍微复杂的要求就比较困难了,比如我需要改变模型的初始位姿,原来的方式是在adams中设置,再生成联合仿真需要的文件,再在matlab中进行调用和仿真,如果工况多的话这样就特别耗时耗力,进过长时间的摸索,终于找出了在matlab中直接改变Adams模型参数的方法,下面具体说明一下。 我这里的模型是一个小球通过弹簧连接在坐标原点,仿真开始后

weixin_40962901的博客 4784

python创建二维数组方法

dp = [[0]*l for _ in range(l)] 和 dp = [[0] * len(s)] * len(s) 推荐第一种 第二种方法下这么生成的二维数组 里面每一行的内存地址都一样 改一个dp[0][0]所有的dp[x][0]都生效了

养猪的纺织工 660

【企业智能体开发】优化模型成本、延迟与失败降级

小林的培训快开始时,服务台花很久“思考最优回答”,体验并不会更好。反过来,为了省钱而始终选最轻的模型,若连房间、连接方式和任务状态都识别不稳,后续错误检索和重复建单会造成更大代价。企业 Agent 的优化对象不是单次模型调用价格,而是任务在可接受时间内、安全地推进到正确结果的总成本。

Mr数据杨 893

微信小程序 - 最新详细实现调起手机摄像头拍摄身份证人像面和国徽面取景框功能,在拍照相机上增加身份证证件照的轮廓或自定义文字,支持替换扫描拍摄辅助线图片及文本,小程序实现拍照身份证时带取景轮廓框拍摄!

微信小程序,身份证,证件照,人像,证件照提示框模板,vue身份证拍照框,摄像机相机里有引导内容,取景框拍摄,微信小程序实现拍照界面自定义实现,自拍人相框拍摄,取景框,户口簿取景框,画布指定区域生成图片,微信小程序身份证正反面拍照如何加入辅助图片引导照片,身份证取景框拍摄,服务器,上传,正反面,调起手机摄像头:拍摄身份证的正反面,自定义身份证取景框,在相机上绘制“身份证轮廓“与提示文字,拍摄身份证时出现人像框怎么实现,在相机上增加图片和文字,微信小程序怎么给调起的相机加入自定义图片,小程序实现给相机上面

🏆 前端领域优质创作者 1万+

LeetCode、1143. 最长公共子序列【中等,二维DP】

LeetCode、1143. 最长公共子序列【中等,二维DP】 题目内容:给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。 两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 2072

【雕爷学编程】Arduino智慧农业之温湿度数据上传到云平台

它们可能有错误、不适用或者无法编译。在实施过程中,需要注意传感器的选择和校准、通信和网络稳定性、数据隐私和安全保护、电源管理以及数据分析和决策支持等方面的事项。数据分析和决策支持:上传到云平台的温湿度数据可以提供丰富的信息,但需要合适的数据分析和决策支持工具来帮助农业业主理解和利用这些数据。您可以根据自己的需求和喜好选择适合您的云平台和库,并根据您的具体硬件配置进行适当的修改和调整。将温湿度数据上传到云平台,农业业主可以实时监测粮库内的温湿度情况,及时采取通风、除湿等措施,确保粮食质量和长期储存的稳定性。

雕爷学编程 1275

leetcode 1143:最长公共子序列

leetcode 1143:最长公共子序列 题目描述:求两个子序列的最长公共子序列 输入:text1 = “abcde”, text2 = “ace” 输出:3 解释:最长公共子序列是 “ace”,它的长度为 3。 解题步骤:和leetcode 516:最长回文子序列类似。 1、 状态定义:dp[i][j]其中i表示字符串1的前i个字符,j表示字符串2的前j个字符,dp[i][j]表示s1[0…i...

张毅的博客 413

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

1143. 最长公共子序列 - 力扣(LeetCode)

假定给出两组字符,求出两组字符的最长子序列长度,以及所有的最长子序列子序列子序列是指一个序列中的元素按照一定顺序排列而得到的新序列,这些元素不一定相邻。比如,序列 [1, 3, 5] 的子序列有 [1, 5]、[3, 5]、[1, 3, 5] 等,其中 [1, 3, 5] 是它的最长子序列。需要注意的是,子序列与子集的概念是不同的,子集是指序列中任意个数的元素组成的集合,包括空集和原序列,而子序列必须按顺序选取若干元素才能得到。

goal66的博客 305

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

leetcode hot100【Leetcode 1143.最长公共子序列】java实现

Leetcode 1143.最长公共子序列-动态规划

DataCrafter的博客 753

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

算法入门 经典DP 力扣1143 最长公共子序列 拓展最长子串 Java

它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。那么 dp[i][j] 的状态只能由 dp[i-1][j-1] 得到。那么 dp[i][j] 的状态只能由 dp[i-1][j-1] 得到。否则则顺延 dp[i-1][j] 和 dp[i][j-1]在字符串中可以不是连续的。

多多的博客 496

golang力扣leetcode 1143.最长公共子序列

1143.最长公共子序列1143.最长公共子序列题解代码 1143.最长公共子序列 1143.最长公共子序列 题解 LCS //state: dp[i][j]表示test1的前i个字符和test2的前j的字串的最长公共子序列 //function: dp[i][j]=dp[i-1][j-1]+1或者=dp[i-1][j]或者=dp[i][j-1] //intialize:dp[0][0]=0 //answer: dp[len(text1)][len(text1)] 代码 package main func

清风 1202

最长公共子序列--LeetCode 1143

最长公共子序列–LeetCode 1143 题目 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列。若这两个字符串没有公共子序列,则返回 0。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde...

何时立秋的博客--向前有路,未来可期 249

【算法】力扣【动态规划,LCS模板】1143. 最长公共子序列

动态规划提供了一种有效的方法,该方法通过分解为更小的子问题,并存储这些子问题的解来避免重复计算。使用动态规划求解LCS问题,我们通常使用选或不选子序列中的某一元素的思路来推导最长公共子序列中的元素组成,可以通过将两个串的长度作为问题规模看待,自顶向下地不断减小问题规模,再自底向上地利用子问题的解得到原问题的解。该题目要求计算两个字符串的最长公共子序列(Longest Common Subsequence,简称LCS)的长度。字符串的子序列是指在不改变字符顺序的情况下,通过删去某些字符后形成的新字符串。

未来就在脚下。 1506

leetcode1143.最长公共子序列

这是一道典型的两个数组的dp问题。

weixin_74006549的博客 663

LeetCode1143 最长公共子序列

文章目录一. 题目描述二. 解题思路三. 代码 一. 题目描述 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。 若这两个字符串没有公共子序列,则返回 0。 来源:力扣(

weixin_43849063的博客 329

动态规划——LeetCode 1143. 最长公共子序列

LeetCode 1143. 最长公共子序列题目描述分析代码 题目描述 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-common-subsequence 著作权

qq_33854211的博客 270

力扣每日一题:1143. 最长公共子序列

目录题目:1143. 最长公共子序列示例1示例2示例3解题思路解题代码解题感悟 题目:1143. 最长公共子序列 难度: 中等 题目: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。 两

aruewds的博客 385

【LeetCode练习】[中等]1143. 最长公共子序列

【LeetCode练习】[中等]1143. 最长公共子序列 1143. 最长公共子序列 1143. 最长公共子序列 算法思想:字符串,动态规划 题目: 分析: java代码 class Solution { //运用动态规划知识 public int longestCommonSubsequence(String text1, String text2) { int M = text1.length(); int N = text2.length(); int[][] dp

qq_39457586的博客 232

【Hot100】LeetCode—1143. 最长公共子序列

【代码】【Hot100】LeetCode—1143. 最长公共子序列。

weixin_44382896的博客 545
上一篇: LeetCode 416. 分割等和子集(0-1背包问题变形)
下一篇: LeetCode 516. 最长回文子序列
MegaBytes
博客等级 码龄8年 45粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值