【leetcode 1143 题】求两个字符串的公共子序列的最大长度

求解两个字符串的最长公共子序列 创建一个二维数组。 阅读详情

题目:给两个字符串,要求返回这俩字符串的最长公共子序列。

比如:两个字符串如下
“123aase234”
“s23se43”
返回:5
/**
 * 求解模型: 序列匹配
 * leetcode 1143 题, 求两个字符串的最长公共子序列的长度
 */
public class Code01_LongestCommonSubsequence {
	/*==============暴力递归版本=================*/
    public static int longestCommonSubsequence(String text1, String text2) {
        if(text1 == null || text2 == null || text1.length() == 0 || text2.length() == 0){
            return 0;
        }
        char[] str1 = text1.toCharArray();
        char[] str2 = text2.toCharArray();
        return process01(str1, str2, text1.length()-1, text2.length()-1);
    }
    private static int process01(char[] text1, char[] text2, int i, int j) {
        if(i == 0 && j == 0){
            return text1[i] == text2[j] ? 1 : 0;
        }
        if(i == 0){  // text1 到最后了
            if(text1[i] == text2[j]){
                return 1;
            }else{
                return process01(text1,text2,i,j-1);
            }
        }else if(j == 0){  // text2 到最后了
            if(text1[i] == text2[j]){
                return 1;
            }else{
                return process01(text1,text2,i-1,j);
            }
        }else{  // text1 与 text2 都没有到最后
            // 情况一: 认为公共子序列一定不包含text1 的 i 位置的字符,可以包含 text2 的 j 位置的字符
            int p1 = process01(text1,text2,i-1,j);
            // 情况二: 认为公共子序列一定不包含text2 的 j 位置的字符,可以包含 text1 的 i 位置的字符
            int p2 = process01(text1,text2,i,j-1);
            // 情况三: 认为公共子序列包含text1与text2的i,j位置的字符,判断二者是否相等?
            // 若等:最长公共子序列 + 1 , 计算 i-1 和 j-1 位置的最长公共子序列
            // 若不等:返回0,
            int p3 = text1[i] == text2[j] ? 1 + process01(text1,text2,i-1,j-1) : 0;
            return Math.max(p1,Math.max(p2,p3));
        }
    }
	
	/*==============动态规划版本=================*/
    /**
     * dp版本 , 可通过暴力递归改进而来
     * @param text1
     * @param text2
     * @return
     */
    public static int longestCommonSubsequence02(String text1, String text2) {
        if(text1 == null || text2 == null || text1.length() == 0 || text2.length() == 0){
            return 0;
        }
        char[] str1 = text1.toCharArray();
        char[] str2 = text2.toCharArray();
        int N = str1.length;
        int M = str2.length;
        int[][] dp = new int[N][M];

        dp[0][0] = str1[0] == str2[0] ? 1 : 0;
        for (int j = 1; j < M; j++) {
            dp[0][j] = str1[0] == str2[j] ? 1 : dp[0][j-1];
        }

        for (int i = 1; i < N; i++) {
            dp[i][0] = str1[i] == str2[0] ? 1 : dp[i-1][0];
        }

        for (int i = 1; i < N; i++) {
            for (int j = 1; j < M; j++) {
                int p1 = dp[i-1][j];
                int p2 = dp[i][j-1];
                int p3 = (str1[i] == str2[j]) ? (1 + dp[i-1][j-1]) : 0;
                dp[i][j] = Math.max(p1,Math.max(p2,p3));
            }
        }
        return dp[N-1][M-1];
    }
}

找出两个字符串的最长公共子串 题目: 给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。 输入描述: 输入包括两行,第一行代表字符串srr1,第二行代表字符串str2。 1 ≤ length( str1), length(str2) ≤ 5000 输出描述: 输出包括一行,代表最长公共子串。 示例 输入 1AB2345CD 12345EF 输出 2345 解题思路 只需要几个变量,从右上角点开始,划“捺” 定义出发点,出发点一开始时(0,m-1) 出发点向左移动,遇到边界后向下移动 代码 阅读详情

相关推荐

基于STM32的红外测温系统设计

为了实现本次的毕业设计,我搜集了大量的文献与资料,通过这些资料了解到红外测温的优点,与实现所需的基本器件,并设计了几个方案,最终选择了STM32作为主控芯片,为此还查阅了关于STM32的资料,在此次设计中采用的是MLX90614医用红外测温模块,通过查阅其数据手册了解其测量精度高且自带温度补偿,所以选择了该传感器作为红外测温模块,本次设计到此已经基本完成,硬件部分和软件部分的设计已基本完成。

weixin_112233的博客 1421

最长公共子序列长度的四种解法

本文使用四种不重复的方法求解最长公共子序列的长度。

qq_43213240的博客 5136

云计算虚拟化实验(一)——虚拟机软件VMware的安装以及虚拟机系统的安装(Windows7+CentOS7)

主要内容: 1、虚拟机软件的安装(以VMware为例) 2、虚拟机系统的安装(Window7 + CentOS7) 3、虚拟主机网络互访 4、不同局域网内的虚拟主机互访(软路由——海蜘蛛) 0 ——首先介绍一下什么是虚拟化? 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在

gg_asd的博客 1万+

力扣1143-最长公共子序列(Java详细题解)

注意这里的子序列和力扣718. 最长重复子数组的子序列不一样,本题的子序列是可以不连续的,而最长重复子数组是需要连续的。当nums[i - 1] == nums[j - 1]时,说明此时结尾的元素相等,那么此时的最长公共子序列就等于他前一个状态加上相同元素的长度即可.因为dp[i] [0]和dp[0] [i]是将一个没有意义的字符串和另一个字符串求最长公共子序列,所以他们的长度就为0。dp[i] [j]的含义是以i - 1结尾的字符串与j - 1结尾的字符串最长公共子序列的长度。所以主要是俩大情况。

2302_79761426的博客 1263

PyTorch GPU版本安装避坑指南:解决RuntimeError: No CUDA GPUs are available报错

本文详细解析了PyTorch GPU版本安装过程中常见的`RuntimeError: No CUDA GPUs are available`报错问题,从硬件驱动检查、CUDA Toolkit与cuDNN安装到PyTorch GPU版本的正确配置,提供了全面的避坑指南和实战验证方法,帮助开发者高效搭建深度学习开发环境。

r2s3t4的博客 296

#Linux内存管理# 用一个案例详细介绍ARMv7-A架构 缺页中断处理的原理

跳转到异常向量:根据 异常向量表基地址(通常配置在 VBAR 寄存器中,例如 0xFFFF0000) + 数据中止异常的偏移量 0x10,跳转到数据中止异常的处理程序入口点 0xFFFF0010(实践中,这个入口通常是一条跳转到更复杂处理函数的指令)。malloc 通常不会立即分配物理内存页,它只是在内核为该进程维护的虚拟地址空间中找到一段足够大的空闲虚拟地址区域(比如 0x00008000 - 0x00008FFF),标记为已用,并返回起始地址(例如 0x00008000)给程序。

sinat_37817094的博客 993

leetcode-代码随想录-动态规划-1143最长公共子序列

是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。1143题(最长公共子序列 - 不连续)是这两个字符串所共同拥有的子序列。,返回这两个字符串的最长。的最长公共子序列长度。:双重循环,都从前往后。

luckyme_的博客 938

华为OD机试双机位C卷-部门人力分配 (Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【部门人力分配】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 部门人力分配。

qq_45776114的博客 1872

Leetcode 1143.最长公共子序列(求长度)

Time: 20190906 Type: Medium 题目描述 给定两个字符串text1和text2,返回它们的最长公共子序列。 子序列是通过原字符串删除一些字符(可以不删)生成的新的字符串,不改变原来字符的相对顺序。比如ace是abcde的子序列,而aec则不是。 公共子序列是指该序列是两个字符串都有的子序列。 如果没有公共子序列,则返回0即可。 Example 1: Input: text1...

Bing's Blog 814

YOLOv11改进 | 细节涨点篇 | DySample一种最新的轻量化动态上采样算子(效果完爆CARAFE)

本文给大家带来的最新改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外,DySample在包括语义分割、目标检测、实例分割、全景分割和单目深度估计在内的五个预测任务中,性能均优于其他上采样器(截至目前最有效的上采样算子),

Snu77的博客 4209

FreeRTOS全攻略:从入门到精通

本文聚焦 FreeRTOS,从基础概念出发,阐述其开源、轻量级等优势。着重介绍 FreeRTOS 入门知识,涵盖内存管理、任务操作、同步互斥机制等核心内容。其中,空闲任务与钩子函数保障系统基础运行与功能扩展;队列、信号量、互斥锁和事件组等机制,分别从数据传递、资源访问控制、优先级问题解决及多任务同步等方面,为开发者提供高效的任务间协作与资源管理方案,助力开发者掌握 FreeRTOS 核心技术,为嵌入式项目开发筑牢基础。

邓邓子的博客 6357

[LeetCode] 1143、最长公共子序列

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

aift的专栏 410

uniapp [全端兼容] - 详细实现人脸识别和活体检测功能,实时监测人脸是否进入区域及动作是否正确播报,免费自动提示引导动作及语音,提供提供实名认证、身份证识别、人脸信息采集、刷脸扫脸认证示例代码

uniapp,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,人脸识别,扫脸认证,人脸认证,活体认证,身份认证,uni-app人脸识别详细教程,如何在app端实现免费人脸识别教程,如何在小程序端做,最好用的插件,安卓ios百度人脸识别、活体检测、人脸采集APP,H5人脸识别带前后摄像头,适合新手看的人脸识别功能教程,详细示例代码源码,有没有免费的,接入百度,阿里云人脸识别,百度,api,活体检测,数据采集,动作提示指引,语音提示指引,报错,无法核验一直出错,根本用

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

Offer必备算法23_两个数组dp_八道力扣题详解(由易到难)

Offer必备算法23_两个数组dp_八道OJ详解(①力扣1143. 最长公共子序列+②力扣1035. 不相交的线+③力扣115. 不同的子序列+④力扣44. 通配符匹配+⑤力扣10. 正则表达式匹配+⑥力扣97. 交错字符串+⑦力扣712. 两个字符串的最小ASCII删除和+⑧力扣718. 最长重复子数组)

参考书籍:《C语言程序设计》《数据结构》《C++ Primer》《Effective C++》《STL源码剖析》《现代操作系统》《UNIX环境高级编程》《图解TCP/IP》《图解HTTP》《Linux高性能服务器编程》《剑指Offer》《算法导论》 1439

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

力扣:1143.最长公共子序列(LCS)

力扣:1143.最长公共子序列(LCS) 1、题目(longest-common-subsequence, LCS) 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。 两个字符串的 公共子

meraki的博客 556

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LeetCode-1143. Longest Common Subsequence [C++][Java]

Given two stringstext1andtext2, returnthe length of their longestcommon subsequence.If there is nocommon subsequence, return0.

贫道绝缘子的博客 1483

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LeetCode 1143 最长公共子序列

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

麦格芬230的博客 191

代码随想录算法第四十四天| LeetCode1143最长公共子序列、LeetCode1035不相交的线、LeetCode53最大子数组和、LeetCode392判断子序列

昨天健身有氧加力量练的太累了,算法就写了一道题,加上最近刚把电脑初始化了一番,起因是D盘文件夹建的太多了太乱了。初始化了D盘就建了三文件夹一个dev存开发软件workSpace存项目文件另一个softWare存各种社交媒体或者其他各种软件。不过麻烦的是要重配环境,我还记得第一次配环境的时候感觉好麻烦,每次都会遇到各种问题浪费大把时间,但昨天没花多久就配好了jdk和maven,发现其实挺容易的,没有想象中那么难了,流程就JAVA_HOME,再配置jdk的bin目录,然后maven同理,除此之外在setting

兑现自己能兑现的天赋吧 1166

LeetCode 1143. 最长公共子序列

表示两个字符串前i和前j个字符的LCS长度。当字符不匹配时,取左边和上方值的最大值。最终返回DP表右下角的值即为两个完整字符串的最长公共子序列长度。如表所示,当字符匹时,当前LCS长度 = 去掉这两个字符的LCS长度 + 1,字符不匹配时,当前LCS长度 = 一下两个子问题的最大值。是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。第一行和第一列初始化为0,表示空字符串与任何字符串的LCS长度为0。,返回这两个字符串的最长。

qscfgjn的博客 283

【LeetCode 热题100】字符串 DP 三连:最长回文子串、最长公共子序列 & 编辑距离(力扣5 / 1143/ )(Go语言版)

本文详细解析了字符串动态规划(DP)领域的三个经典问题:**最长回文子串**(LeetCode 5)、**最长公共子序列**(LeetCode 1143)和**编辑距离**(LeetCode 72)。通过定义状态、推导状态转移方程,结合 Go 语言实现代码,深入浅出地讲解了解题思路。从判断子串是否为回文到求解两个字符串的匹配长度,再到计算字符串转换的最小操作数,每道题都展示了 DP 的核心思想与应用场景。最后通过表格总结对比三题的异同,帮助读者更好地掌握字符串 DP 的解题技巧。

小韩的博客 929

176、【动态规划】leetcode ——1143. 最长公共子序列(C++版本)

因为i-1和j-1时不等,则取取消一个末尾后,二者中的继承的最大长度值。text2[j - 1]`结尾,具有的最长公共子序列。的区别在于此时不要求令一个数组中元素连续。,在上一个长度的基础上加一。以text1[i - 1]

STAR GAME 530

leetcode-1143. 最长公共子序列

leetcode - 1143

sinat_41679123的博客 271

力扣● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划

一样,dp[i][j]应该在上一个公共子序列的基础上+1,那么上一个最长的公共子序列是哪一个,如果是dp[i][j]的定义是以A[i-1]/B[j-1]为结尾的子序列,那么要求上一个最长的公共子序列,dp[][]的两个下标有可能是[0,i-1]和[0,j-1]的任何一个值,所以这时两层循环里面还要有两层循环,肯定会超时。所以按照dp[i][j]正确的定义,如果A[i-1]==B[j-1]的话,上一个最长的公共子序列就是dp[i-1][j-1]代表的,所以dp[i][j]=dp[i-1][j-1]+1。

weixin_45706374的博客 1240

代码随想录算法训练营第五十三天|1143.最长公共子序列 1035.不相交的线 53. 最大子数组和

1.确定dp数组及下标含义: dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列;2.确定递推公式:if (text1[i - 1] == text2[j - 1]) dp[i][j] = dp[i - 1][j - 1];2.确定递推公式:dp[i] = max(dp[i - 1] + nums[i], nums[i]);1.确定dp数组及下标含义: dp[i]:以nums[i]为结尾的最大连续子序列和。

weixin_74976519的博客 513
上一篇: Spring中Bean的生命周期(三种版本循序渐进,简单易懂)
下一篇: Leetcode49 字母异位词分组解析
种花途。
博客等级 码龄10年 3粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值