两个字符串的最长 公共子序列

server/2024/10/21 14:49:18/

给定两个字符串 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 。

提示:

  • 1 <= text1.length, text2.length <= 1000
  • text1 和 text2 仅由小写英文字符组成。

class Solution {
public:int longestCommonSubsequence(string text1, string text2) {int m = text1.length(), 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];
}
};

 

定义一个二维数组 dp,大小为 (m+1) x (n+1)。其中 dp[i][j] 表示 text1 的前 i 个字符和 text2 的前 j 个字符的最长公共子序列的长度。

如果 text1[i-1] == text2[j-1],则 dp[i][j] = dp[i-1][j-1] + 1,即找到一个新的公共字符,LCS 长度增加 1。

如果 text1[i-1] != text2[j-1],则 dp[i][j] = max(dp[i-1][j], dp[i][j-1]),即比较删除 text1 的最后一个字符或 text2 的最后一个字符时哪个 LCS 更长。

举例:text1 = "abcde"; text2 = "ace";

    • i = 1j = 1 时,text1[0] = 'a'text2[0] = 'a' 相等,dp[1][1] = dp[0][0] + 1 = 1

    • i = 1j = 2 时,text1[0] = 'a'text2[1] = 'c' 不相等,dp[1][2] = max(dp[0][2], dp[1][1]) = 1

    • i = 1j = 3 时,text1[0] = 'a'text2[2] = 'e' 不相等,dp[1][3] = max(dp[0][3], dp[1][2]) = 1

    • i = 2j = 1 时,text1[1] = 'b'text2[0] = 'a' 不相等,dp[2][1] = max(dp[1][1], dp[2][0]) = 1

    • i = 2j = 2 时,text1[1] = 'b'text2[1] = 'c' 不相等,dp[2][2] = max(dp[1][2], dp[2][1]) = 1

    • i = 2j = 3 时,text1[1] = 'b'text2[2] = 'e' 不相等,dp[2][3] = max(dp[1][3], dp[2][2]) = 1

    • i = 3j = 1 时,text1[2] = 'c'text2[0] = 'a' 不相等,dp[3][1] = max(dp[2][1], dp[3][0]) = 1

    • i = 3j = 2 时,text1[2] = 'c'text2[1] = 'c' 相等,dp[3][2] = dp[2][1] + 1 = 2

    • i = 3j = 3 时,text1[2] = 'c'text2[2] = 'e' 不相等,dp[3][3] = max(dp[2][3], dp[3][2]) = 2

    • i = 4j = 1 时,text1[3] = 'd'text2[0] = 'a' 不相等,dp[4][1] = max(dp[3][1], dp[4][0]) = 1

    • i = 4j = 2 时,text1[3] = 'd'text2[1] = 'c' 不相等,dp[4][2] = max(dp[3][2], dp[4][1]) = 2

    • i = 4j = 3 时,text1[3] = 'd'text2[2] = 'e' 不相等,dp[4][3] = max(dp[3][3], dp[4][2]) = 2

    • i = 5j = 1 时,text1[4] = 'e'text2[0] = 'a' 不相等,dp[5][1] = max(dp[4][1], dp[5][0]) = 1

    • i = 5j = 2 时,text1[4] = 'e'text2[1] = 'c' 不相等,dp[5][2] = max(dp[4][2], dp[5][1]) = 2

    • i = 5j = 3 时,text1[4] = 'e'text2[2] = 'e' 相等,dp[5][3] = dp[4][2] + 1 = 3

  • 返回结果
    最终,dp[5][3] = 3,这意味着 "abcde""ace" 的最长公共子序列长度为 3。


http://www.ppmy.cn/server/133652.html

相关文章

如何得到两个蛋白质序列的一致性和相似性

一、概念辨析 &#xff08;1&#xff09;一致性 一致性&#xff08;identity&#xff09;&#xff1a;如果两个序列&#xff08;蛋白质或核酸&#xff09;长度相同&#xff0c;那么它们的一致性定义为它们对应位置上相同的残基&#xff08;一个字母&#xff0c;氨基酸或碱基&…

Spring Boot为大创项目提供智能报表解决方案

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

【C语言】字符函数和字符串函数(上)

本篇博客将讲解以下知识&#xff1a; &#xff08;1&#xff09;字符分类函数 &#xff08;2&#xff09;字符转换函数 &#xff08;3&#xff09;strlen的使用和模拟实现 1、字符分类函数 C语言中有一一系列的函数是专门做字符分类的&#xff0c;就是字符是属于什么类型的字符…

解析Gitxray:一种新的基于GitHub REST API的网络安全解决方案

关于Gitxray Gitxray是一款基于GitHub REST API的网络安全工具&#xff0c;支持利用公共 GitHub REST API 进行OSINT、信息安全取证和安全检测等任务。 Gitxray&#xff08;Git X-Ray 的缩写&#xff09;是一款多功能安全工具&#xff0c;专为 GitHub 存储库而设计。它可以用于…

3D Slicer 教程二 ---- 数据集

上一章下载3d slicer的软件,这章从加载数据集来弄清楚3dslicer怎么使用. 一. 加载数据集 如果没有数据集,也可用用样本数据. (1) "File" --> "add Data" 可以添加图片文件夹,(试了MP4不行,内镜的视频估计不支持),添加单个图片的话,会出现一些选项, …

管理沟通的艺术:跨越挑战,迈向卓越

在复杂多变的管理环境中&#xff0c;沟通不仅是信息传递的桥梁&#xff0c;更是管理工作的核心载体。它承载着所有管理活动的推进&#xff0c;是协同多人完成任务的基石。然而&#xff0c;沟通并非易事&#xff0c;尤其在技术管理者转型为全面管理者时&#xff0c;面临的挑战尤…

TwinCAT3 软件介绍

文章目录 软件界面各个窗口说明如下图&#xff1a; 工具栏说明如下&#xff1a; 调试按钮说明如下&#xff1a; TwinCAT运行环境按钮说明如下&#xff1a; PLC项目环境说明如下&#xff1a; TwinCAT系统状态图标说明如下&#xff1a; PLC程序状态说明如下&#xff…

模拟键盘输入卡号RFID读卡器银河麒麟桌面操作系统兼容适配认证测试报告

本测试报告使用读卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1b72i5j0&ftt&id702441469725