二维动态规划----4.最长公共子序列

最长公共子序列 【微软面试100题 第五十六题】 题目要求:   如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串中,则字符串一称为字符串二的子串。   注意,并不是要求子串(字符串一)的字符必须连续出现在字符串二中。   请编写一个函数,输入两个字符串,求它们的最长公共子序列,并打印出最长公共序列。   例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA、BDAB和BCAB都是它们的最长公共子序列,则输出 阅读详情

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

/**

        LCS[i][j]:代表S1以i(长度)结尾和S2以j(长度)结尾的最长公共子序列的长度()

        若S1[i] == S2[j],则LCS[i][j] = 1 + LCS[i - 1][j - 1],

        即当前两字符相等,一定至少是长度为1的公共子序列,只需要再加上各自往前推一个字符分别以i - 1 和 j - 1 结尾的最长公共子序列即可

        若S1[i] != S2[j],则LCS[i][j] = Math.max(LCS[i - 1][j],LCS[i][j - 1])

        即当前两字符不相等,LCS[i][j]则完全取决于在此之前的字符,两串分别舍去一个字符取最大,即在LCS[i - 1][j],LCS[i][j - 1]中挑选最大的

*/

class Solution {
    /**
        LCS[i][j]:代表S1以i(长度)结尾和S2以j(长度)结尾的最长公共子序列的长度()

        若S1[i] == S2[j],则LCS[i][j] = 1 + LCS[i - 1][j - 1],
        即当前两字符相等,一定至少是长度为1的公共子序列,只需要再加上各自往前推一个字符分别以i - 1 和 j - 1 结尾的最长公共子序列即可

        若S1[i] != S2[j],则LCS[i][j] = Math.max(LCS[i - 1][j],LCS[i][j - 1])
        即当前两字符不相等,LCS[i][j]则完全取决于在此之前的字符,两串分别舍去一个字符取最大,即在LCS[i - 1][j],LCS[i][j - 1]中挑选最大的
    */
    public int longestCommonSubsequence(String text1, String text2) {
        int text1Len = text1.length();
        int text2Len = text2.length();

        int LCS[][] = new int[text1Len + 1][text2Len + 1];

        for(int i = 1; i <= text1Len; i++) {
            for(int j = 1; j<= text2Len; j++) {
                if(text1.charAt(i - 1) == text2.charAt(j - 1)) {
                    LCS[i][j] = LCS[i - 1][j - 1] + 1;
                }

                else {
                    LCS[i][j] = Math.max(LCS[i - 1][j], LCS[i][j - 1]);
                }
            }
        }

        return LCS[text1Len][text2Len];
    }
}

Python 算法入门教程:动态规划算法实战 本小节会以 leetcode 上的 4 道编程题来进行动态规划算法的实战,以帮助大家更好的理解和掌握动态规划算法。 阅读详情

相关推荐

动态规划 之 最长公共子序列问题

下面这篇文章介绍一下在算法设计中动态规划的最长公共子序列的问题。 最长公共子序列问题所谓,也即是分别给出长度为n和m的字符串A,B,然后找出其中最长公共子序列的最优值和最优解。 所谓最优值,也就是求出这个最长公共子序列的长度;而最优解,就是要求出这个最长最长公共子序列是什么的问题。给个不太恰当的例子:我们中学数学中经常会遇到求函数最值的问题,比如说求出函数 f(x) 的最大值,那么这个最大值就

小邓笔记 6515

caioj 1071 动态规划入门(二维一边推4:相似基因) (最长公共子序列拓展)

复制上一题总结 caioj 1069到1071 都是最长公共字序列的拓展,我总结出了一个模型,屡试不爽    (1) 字符串下标从1开始,因为0用来表示字符为空的情况,而不是第一个字符     (2)初始化问题。         一般设f[i][j]为第一个字符前i个,第二个字符前j个的最优价值          f[0][0] = 0           然后要初始化f[i][0], f[0]...

自强不息 厚德载物 330

最长公共子序列(动态规划)

最长公共子序列 最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经典的面试题目,因为它的解法是典型的二维动态规划,大部分比较困难的字符串问题都和这个问题一个套路,比如说编辑距离。而且,这个算法稍加改造就可以用于解决其他问题,所以说 LCS 算法是值得掌握的。 题目就是让我们求两个字符串的 LCS 长度: 输入: s1 = "babcde", s2 = ...

Mk_kkkk的博客 1655

算法设计与分析----最长公共子序列

给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB 则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA 对于这个问题,用一个二维数组记录两个字符串的状态,例如dp[2][3]表示的意思是A串前两个字符与B串前三个字符公共子序列的长度,所以dp的第一维的长度是A串的长度,dp第二...

蒟蒻达的博客 2476

动态规划之最长公共子序列

!

whdsg66的博客 1204

【加密社】私钥碰撞器,秒杀市面上的碰撞器

基于上述的逻辑和代码,开发了ETH挖掘器(图1.1)这里有个亮点是:1.很多开发者在判断地址是否有效的环节上,用的是查询余额,其实这是不对的,查询余额你可能只能查询对应代币的余额,例如usdt,eth等但是如果用查询交易次数就不一样了,你只要是交易过,我就认为是有效钱包,这样的速度比查询余额要快,也要更准确。2.rpc节点可配置。

加密社的博客 1582

D - 最长公共子序列问题

Description 给定两个序列 X={x1,x2,…,xm} 和 Y={y1,y2,…,yn},找出X和Y的最长公共子序列。 Input 输入数据有多组,每组有两行 ,每行为一个长度不超过500的字符串(输入全是大写英文字母(A,Z)),表示序列X和Y。 Output 每组输出一行,表示所求得的最长公共子序列的长度,若不存在公共子序列,则输出0。 Sample Input ABCBDAB BDCABA Output 4 ...

qq_39173848的博客 248

kubedns-coredns部署pod出现not ready问题

文章目录遇到的问题1、发现问题2、排查问题3、解决方法 coredns的实例health_check不通过的问题,排查和解决方法 遇到的问题 1、发现问题 pod启动但是未ready 查看是readiness失败 使用对应的URL进行curl,发现真的返回503 2、排查问题 查看错误日志,发现一堆这个错误"waiting on : kubernetes" 网上相关的问题解答 这个跟测试场景不一样,这个案例是开了防火墙,可以确认我这个案例的机器没有开防火墙,但它提醒了一点,coredns是需要访问ap

u012533481的博客 2844

最长公共子序列

/************************************************* *@time 2016/08/25 9:48 *@place ctrip.15#.9f **************************************************/ #include #include #define MAX_LENGTH

nianhuatingyu的博客 188

芒果YOLO11改进146:OBB旋转检测头Head篇:即插即用|轻量化非对称多级压缩LOADH旋转检测头,原创改进适配YOLOv8高效检测头,检测头新颖改进,全网首发独一份

OBB旋转检测头Head篇:即插即用|轻量化非对称多级压缩LOADH旋转检测头,原创改进适配YOLOv8高效检测头,检测头新颖改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 643

Unity 热更新技术 | (二) AssetBundle - 完整系列教程学习

开始学习热更新方面系列知识,就从这一篇开始吧! 本系列教程 会从热更新基本概念出发,详细介绍热更新相关的全套知识点。 如热更新技术基本原理、热更新主流方案、AssetBundle系列教程、Lua语言编程、Lua与Unity交互教程、Xlua框架使用、热更新实战教程等方面。 热更新作为一个开发者必备技能,如果想学习的话,可以从现在开始了哦~ 接下来从 AssetBundle - 完整系列教程学习 开始学习吧!

努力前行,总会成为自己心中的那道光 1万+

ACM-week7 动态规划

Week7动态规划

swcj240031的博客 243

2、系统建模、状态估计与故障诊断中的滤波设计与故障诊断方法

本文综述了系统建模、状态估计与故障诊断中的滤波设计与故障诊断方法。首先介绍了基于分析模型、知识和信号处理的三类故障诊断方法及其特点;随后总结了传统滤波方法(如维纳滤波、卡尔曼滤波)与非概率的集员滤波方法,重点阐述了在未知但有界噪声假设下的椭球、立方、多面体、区间和Zonotope等集员滤波算法原理与发展。文章还展示了各类集员滤波算法的应用实例与流程图,并对比了其计算复杂性与准确性。最后指出,根据不同系统特性选择合适的故障诊断与滤波方法至关重要,未来趋势将趋向于多方法融合与实际工程应用深化。

kmeans3miner的博客 139

leetcode-583. 两个字符串的删除操作

给定两个单词 和 ,返回使得 和 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例2: 思路: 最长公共子序列的变种题,求出两者的最长子序列后再额外计算一下即可 最长公共子序列问题解答见这篇: leetcode-1143.最长公共子序列 这里不再详细解释 涉及知识点: 1.动态规划(dp)...

Gundam的博客 351

验证方法、符合性方法与设计保证的关系

未来,随着适航标准和工程实践的不断演进,验证与符合性方法将持续优化,以应对日益复杂的系统设计需求。设计保证过程中的验证活动具有双重作用,既用于设计过程的质量控制和风险管理,又作为适航符合性方法的重要支持材料。在未来的航空电子系统开发中,进一步优化设计保证与验证活动的协同作用,将有助于应对日益复杂的工程挑战,推动航空安全技术的发展。为了全面理解这二者之间的关系,本章将系统说明设计保证过程中的验证活动如何既服务于设计保证,又作为符合性方法中的核心证明材料。最终,通过功能测试和环境测试验证硬件的实际性能。

qq_41854911的博客 554

YOLOv8有效涨点,增强型 YOLOV8 与多尺度注意力机制特征融合,附代码,详细步骤

在本实验中,我们通过将双层路由注意(BRA)、广义特征金字塔网络(GFPN)和第四检测头结合到YOLOv8中,开发了一种新颖的BGF-YOLO架构。BGF-YOLO 包含注意力机制,可以更多地关注重要特征,特征金字塔网络可以通过将高级语义特征与空间细节合并来丰富特征表示。此外,我们研究了不同的注意力机制和特征融合、检测头架构对检测准确性的影响。实验结果表明,与YOLOv8x相比,BGF-YOLO的mAP50增加了4.7%。

kay_545 3048

动态规划(最长公共子序列)

最长公共子序列:1.备忘录方法(数组c和数组b)动态规划; 2.不使用表b,用O(m+n)的运行时间重构LCS; 3.用更少的空间复杂度实现LCS_LENGTH; 4.最长递增子序列(O(n^2)和O(nlogn))。

Fatunlorey的博客 7790

AI使能的SVD算子:基于深度学习的矩阵分解方法

奇异值分解(Singular Value Decomposition, SVD)是线性代数中一种重要的矩阵分解方法,广泛应用于信号处理、数据降维、推荐系统等领域。传统SVD算法虽然精确,但在处理大规模矩阵时面临计算复杂度高、内存需求大等问题。本文提出了一种基于深度学习神经网络的SVD算子实现方法,完全摒弃传统数值算法,仅使用PyTorch框架构建的神经网络模型来完成大规模信道矩阵的SVD分解与还原。

huanghm88的专栏 1337

2、二维动态规划

一、课程目标 二维动态规划 例子-路径总数 例子-LCS 二、目标详解 1、二维动态规划 动态规划入门里,状态都只有一个维度,一般为dp[k],称之为线性动态规划。 当维度有两个的时候,需要用二维的状态来解决问题,例如棋盘、矩阵、路径等类别的问题。 更准确的说,二维动态规划指线性动态规划的拓展,在一个平面上做动态规划。 规律:当前格子的状态,往往与左边、上边、左上的格子状态有...

zhujiana的专栏 4654

精雕软件(JDpaint) 5.5 绿色版

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

算法7、二维动态规划-最长公共子序列LCS

ij。

topsylily的博客 870

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

如图,最后一位都为A,那么A前的子序列的最大公共子序列则为dp[i-1][j-1]这样放眼到完整子序列中,长度便是dp[i-1][j-1]+1这样便可以得到递推公式dp[i][j-1]字符串 ( S_1 ) 的前 ( i ) 个字符和字符串 ( S_2 ) 的前 ( j ) 个字符的最长公共子序列长度。

有时候,想要一块二向箔 1307

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

动态规划 最长公共子序列

IT_涛涛 3422

【动态规划】最长公共子序列和最长公共子串(python)

动态规划经典例题——最长公共子序列和最长公共子串(python) 很久之前大概是高中的时候写过这种题目,使用动态规划的方法求解的,现读研究生了,要把过去的拾起来的呢。 1. 最长公共子序列(LCS) 1.1 问题描述 1.2 思路 利用动态规划。 下一步就要找到状态之间的转换方程。 因此可以根据这个方程来进行填表,以"helloworld"和“loop”为例: 1.3 Python代码 d...

机器学习初学者必看,关注我,一起了解机器学习 4489

【算法】动态规划—最长公共子序列

专门让索引为0的行和列表示空串,dp[0][..],dp[..][0]都应该初始化为0,这就是 base case。比如按照刚才dp数组的定义,dp[0][3]=0 的含义是:对于空字符串 "" 和 "bab",其LCS的长度为0。因为一个字符串是空串,它们的最长公共子序列的长度显然应该是0。

qq_58023907的博客 1289
上一篇: 二维动态规划----3.最长回文子串
下一篇: 二维动态规划----5.编辑距离
码破苍穹ovo
博客等级 码龄2年 377粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值