dp经典问题:LCS问题

news2024/11/15 22:45:30

dp:LCS问题

最长公共子序列(Longest Common Subsequence, LCS)问题 是寻找两个字符串中最长的子序列,使得这个子序列在两个字符串中出现的相对顺序保持一致,但不要求连续。

力扣原题链接

1.定义

给定两个字符串 S1和S2
S 1 = a 1 a 2 a 3 . . . a n → 长度为 n 的字符串 S1=a_1a_2a_3...a_n \to 长度为n的字符串 S1=a1a2a3...an长度为n的字符串
S 2 = b 1 b 2 b 3 . . . b m → 长度为 m 的字符串 S2=b_1b_2b_3...b_m \to 长度为m的字符串 S2=b1b2b3...bm长度为m的字符串

子序列(Subsequence)

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在 不改变字符的相对顺序 的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

对于 S1 来说

S s u b = a i . . . a j ← i < j , S s u b ∈ S 1 S_{sub}=a_i...a_j \gets i<j, S_{sub} \in S1 Ssub=ai...aji<j,SsubS1

比如说

S 1 = a b c d f g h S_1=abcdfgh S1=abcdfgh

S 2 = a b d f h r S_2=abdfhr S2=abdfhr

S 1 ∩ S 2 = a b d f h S_1 \cap S_2 = abdfh S1S2=abdfh

2. 动态规划解法

Step1 分析子问题

对于每个子问题都要求出到当前两个子字符串的最长公共子序列。

Step2 状态定义

dp[i][j] 表示 text1 的前 i 个字符与 text2 的前 j 个字符的最长公共子序列长度。

Step3 递推求解

  1. 初始化状态:

    • i == 0j == 0 时,dp[i][j] = 0,因为任意一个空字符串与另一个字符串的最长公共子序列长度为 0。
  2. 状态转移方程:

d p [ i ] [ j ] = { d p [ i − 1 ] [ j − 1 ] + 1 if text1[i] = text2[j] max ⁡ ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] ) if  text1[i]  ≠  text2[j] dp[i][j] = \left\{ \begin{array}{ll} dp[i-1][j-1] + 1 & \text{if } \text{text1[i] = text2[j]} \\ \max(dp[i-1][j], dp[i][j-1]) & \text{if } \text{text1[i] $\neq$ text2[j]} \end{array} \right. dp[i][j]={dp[i1][j1]+1max(dp[i1][j],dp[i][j1])if text1[i] = text2[j]if text1[i] = text2[j]

示例

在这里插入图片描述

动态规划代码实现

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

递归代码实现
递归调用的开销会很大,力扣这个题会超时

class Solution{
    int longestCommonSubsequence(string text1, string text2) {
        return rec(text1,text2,text1.size()-1,text2.size()-1);
    }
    int rec(const&string str1,const&string str2,int m,int n){
        if(m==0||n==0)return 0;
        if(str1[m]==str[n]){
            return 1+rec(str1,str2,m-1,n-1);
        }else{
            return max(rec(str1,str2,m-1,n),rec(str1,str2,m,n-1));
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1857965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apple - Game Center Programming Guide

本文翻译整理自&#xff1a;Game Center Programming Guide&#xff08; Updated: 2016-06-13 https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008304 文章…

什么是zip格式?zip格式文件要怎么打开,一文详解

Zip是一种常见的压缩文件格式&#xff0c;广泛应用于文件和文件夹的打包和压缩。它的使用方便、文件体积小&#xff0c;是网络传输和存储文件时的常用选择。本文将深入介绍Zip格式的定义、特点以及它在现代计算机应用中的重要性。 zip是什么文件&#xff1f; ZIP是一种相当简单…

专业竞赛组织平台赛氪网,引领大学生竞赛新时代

随着互联网技术的快速发展&#xff0c;高校学科竞赛组织和管理正迎来新的变革。环球赛乐&#xff08;北京&#xff09;科技有限公司&#xff08;以下简称”赛氪网“&#xff09;&#xff0c;作为一家专业竞赛组织平台不仅致力于大学生成长和前途的拓展&#xff0c;更在推动学科…

【Android】Android Studio 使用Kotlin写代码时代码提示残缺问题解决

问题描述 Android Studio升级之后&#xff0c;从Android Studio 4.2升级到Android Studio Arctic Fox版本&#xff0c;因为项目比较老&#xff0c;使用的Gradle 版本是3.1.3&#xff0c;这个版本的Android Studio最低支持Gradle 3.1版本&#xff0c;应该算是比较合适的版本。 …

【Redis】如何保证缓存和数据库的一致性

目录 背景问题思路 三个经典的缓存模式Cache-Aside读缓存写缓存为什么是删除旧缓存而不是更新旧缓存&#xff1f;为什么不先删除旧的缓存&#xff0c;然后再更新数据库&#xff1f; 延迟双删如何确保原子性 Read-Through/Write-ThroughRead-ThroughWrite-Through Write Behind …

LINUX桌面运维----第一天

一、Linux的特点&#xff1a; &#xff08;1&#xff09;与UNIX兼容 &#xff08;2&#xff09;自由软件&#xff0c;源码公开 &#xff08;3&#xff09;性能高&#xff0c;安全性强 &#xff08;4&#xff09;便于定制和再开发 &#xff08;5&#xff09;相互之间操作性…

某同盾验证码

⚠️前言⚠️ 本文仅用于学术交流。 学习探讨逆向知识&#xff0c;欢迎私信共享学习心得。 如有侵权&#xff0c;联系博主删除。 请勿商用&#xff0c;否则后果自负。 网址 aHR0cHM6Ly9zZWMueGlhb2R1bi5jb20vb25saW5lRXhwZXJpZW5jZS9zbGlkaW5nUHV6emxl 1. 先整体分析一下接…

地级市绿色创新及碳排放与环境规划数据(2000-2021年)

数据简介&#xff1a;分享各个城市对于碳排放的降低做出了哪些共享。该数据是地级市2000-2021年间由绿色创新、碳排放与环境规制数据构成的能源与环境研究数据大合集&#xff0c;并对其进行可视化处理&#xff0c;供大家研究使用。当今我国大力推进生态文明建设、美丽中国建设等…

【Python系列】FastAPI 中的路径参数和非路径参数解析问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

PDF秒变翻页式电子画册

​在当今数字化时代&#xff0c;将PDF文档转换成翻页式电子画册是一种提升作品展示效果和传播效率的有效方式。以下是将PDF秒变翻页式电子画册的攻略&#xff0c;帮助您轻松掌握数字创作技巧。 首先&#xff0c;选择一个合适的制作工具是关键。目前市场上有多种在线平台和软件可…

元素旋转?一个vue指令搞定

说在前面 &#x1f388;鼠标控制元素旋转功能大家应该都不陌生了吧&#xff0c;今天我们一起来看看怎么编写一个vue指令来实现元素旋转功能吧&#xff01; 效果展示 体验地址 http://jyeontu.xyz/jvuewheel/#/JRotateView 实现思路 1、自定义指令对象 export default {inse…

选择门店收银系统要考虑哪些方面?美业系统Java源码分享私

开店前的一个重要事件就是选择门店收银软件/系统&#xff0c;尤其是针对美容、医美等美业门店&#xff0c;一个优秀专业的系统十分重要&#xff0c;它必须贴合门店的经营需求&#xff0c;提供更全面、便捷、高效的管理功能&#xff0c;帮助提升门店的服务质量和经营效益。 以下…

品牌策划背后的秘密:我为何对此工作情有独钟?

你是否曾有过一个梦想&#xff0c;一份热爱&#xff0c;让你毫不犹豫地投身于一个行业&#xff1f; 我就是这样一个对品牌策划充满热情的人。 从选择职业到现在&#xff0c;我一直在广告行业里“混迹”&#xff0c;一路走来&#xff0c;也见证了许多对品牌策划一知半解的求职…

CPsyCoun:心理咨询多轮对话自动构建及评估方法

CPsyCoun: A Report-based Multi-turn Dialogue Reconstruction and Evaluation Framework for Chinese Psychological Counseling 在大模型应用于心理咨询领域&#xff0c;目前开源的项目有&#xff1a; https://github.com/SmartFlowAI/EmoLLM &#xff08;集合&#xff0c;…

mp4转换成mp3怎么转?教你几种值得收藏的转换方法!

mp4转换成mp3怎么转&#xff1f;MP4&#xff0c;这一深入人心的数字多媒体容器格式&#xff0c;无疑在当今数字世界中占据了一席之地&#xff0c;那么&#xff0c;它究竟有何过人之处呢&#xff1f;首先&#xff0c;MP4的跨平台兼容性是其一大亮点&#xff0c;不论是在Windows的…

(一)、配置服务器的多个网卡路由,访问多个不同网络段

一、现场网络关系说明 有这么一个需要&#xff0c;服务器有三个网口&#xff0c;网口一需要访问外网&#xff0c;网口二需要访问内网1&#xff0c;网口2需要访问内网2。需要配置路由来满足该网络访问需要。 图1 现场网络关系 二、配置教程 步骤1&#xff1a; a、命令行输入…

A股羊群效应CSSD CSAD数据与Stata代码数据(2000-2023)

数据来源 参考马丽老师&#xff08;2016&#xff09;的做法&#xff0c;股价数据来源于东方财富网&#xff0c;采用上证180指数及构成上证180指数样本股日收盘价数据作为样本。上证180指数自2002年7月1日起正式发布&#xff0c;其样本股是在所有 A 股股票中抽取最具市场代表性…

react-native在IOS上集成百度地图详解

export default class BaiDuMapTest extends Component { render() { return ( ); } } const styles StyleSheet.create({ container: { flex: 1, justifyContent: ‘center’, alignItems: ‘center’, backgroundColor: ‘#F5FCFF’, }, welcome: { fontSize:…

若依-前后端分离项目学习

第一天&#xff08;6.24&#xff09; 具体参考视频 b站 楠哥教你学Java 【【开源项目学习】若依前后端分离版&#xff0c;通俗易懂&#xff0c;快速上手】 https://www.bilibili.com/video/BV1HT4y1d7oA/?share_sourcecopy_web&vd_sourcecd9334b72b49da3614a4257…

公司logo设计大全怎么找?直接帮你设计logo

公司logo设计大全怎么找&#xff1f;在品牌塑造的过程中&#xff0c;Logo无疑是至关重要的一环。一个优秀的Logo不仅能够有效传达公司的核心理念和品牌形象&#xff0c;还能在消费者心中留下深刻的印象。然而&#xff0c;对于许多初创公司或小型企业来说&#xff0c;制作出适合…