当前位置: 首页 > news >正文

力扣 — — 最长公共子序列

力扣 — — 最长公共子序列

最长公共子序列

  • 题源:1143. 最长公共子序列 - 力扣(LeetCode)

题目:

在这里插入图片描述

分析:

一道经典的题目:最长公共子序列(LCS)

  • 题目大意:求两个字符串的最长公共序列。

  • 算法:动态规划。

  • 思路

    1. d p dp dp 数组:设置一个数组 d p [ i ] [ j ] dp[i][j] dp[i][j],含义第一个字符串的前 i i i 个字符与第二个字符串的前 j j j 个字符的最大公共子序列。

    2. 初始化: d p [ i ] [ 0 ] = 0 dp[i][0] = 0 dp[i][0]=0 , d p [ 0 ] [ i ] = 0 dp[0][i] = 0 dp[0][i]=0 ,也就是说当第一个字符长度为 0 时,最大公共子序列为 0 ,第二个字符长度为 0 时,最大公共子序列也为 0 ;

    3. 递推公式:

      • 如果第一个字符串的第 i i i 个字符等于第二个字符的第 j j j 个字符时,将两个字符串都回退一个字符,取各自前一个字符匹配的最长公共子序列然后加 1
        d p [ i ] [ j ] = d p [ i − 1 ] [ j − 1 ] + 1 dp[i][j] = dp[i - 1][j - 1] + 1 dp[i][j]=dp[i1][j1]+1

      • 否则就是不相等的情况,这里也就是第一个字符串回退一个字符后与第二个字符串匹配的最长公共子序列第二个字符串回退一个字符串后与第一个字符串匹配的最长公共子序列并从这两个子序列中取最大值作为当前两个字符串匹配的最大公共子序列。
        d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] ) dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) dp[i][j]=max(dp[i1][j],dp[i][j1])

代码:

class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        vector<vector<int>> dp(text1.length() + 1, vector<int>(text2.length() + 1, 0)); 
	
        for(int i = 1;i <= text1.length();i ++) {
            for(int j = 1;j <= text2.length();j ++) {
                if(text1[i - 1] == text2[j - 1]){
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }else {
                    dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
                }
            }
        } 
        return dp[text1.length()][text2.length()];
    }
};
http://www.dtcms.com/a/126770.html

相关文章:

  • 【游戏安全】基于协议场景的挖掘
  • 腾讯云COS与ZKmall 开源商城的存储集成方案
  • Java基础 - 泛型(常见用法)
  • 免费报名 | Ansys Speos 2025 R1新功能更新网络研讨会
  • MacOS红队常用攻击命令
  • 嵌入式系统的历史与发展​
  • Linux 系统中打包与压缩
  • stm32工程,拷贝到另一台电脑编译,错误提示头文件找不到cannot open source input file “core_cm4.h”
  • Python数据可视化-第7章-绘制3D图表和统计地图
  • redis cluster 的通信机制
  • 【深度洞察】解码饮料行业破局点:场景革命
  • 嵌入式面试题:C 语言核心考点经典例题
  • Kubernetes容器编排与云原生实践
  • 相机回调函数为静态函数原因
  • 以太坊区块大小的决定因素:深入解析区块 Gas 限制及其影响
  • java 怎样解析jwt中的payload
  • 华清远见成都中心嵌入式学习总结
  • 【图书管理系统】深入解析基于 MyBatis 数据持久化操作:全栈开发图书管理系统获取图书列表接口(后端:计算图书页数、查询当前页展示的书籍)
  • 免费下载 | 2025电力数据资产管理体系白皮书
  • Spring Cloud Gateway 具体的实现案例
  • Nacos服务发现和配置管理
  • 基于 Q - learning 算法的迷宫导航
  • <C#> 详细介绍.NET 依赖注入
  • WPF设计标准学习记录26
  • P8748 [蓝桥杯 2021 省 B] 时间显示
  • 【后端开发】初识Spring IoC与SpringDI、图书管理系统
  • 第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
  • 【实际项目分享】多相机取图存图问题
  • 红帽9运行容器一
  • UE5 在UE中创建骨骼动画