dp经典问题:LCS问题

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.mfbz.cn/a/740063.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

猫狗识别—视频识别

猫狗识别—视频识别 1. 导入所需的库&#xff1a;2. 创建Tkinter主窗口并设置标题&#xff1a;3. 设置窗口的宽度和高度&#xff1a;4. 创建一个Canvas&#xff0c;它将用于显示视频帧&#xff1a;5. 初始化一个视频流变量cap&#xff0c;用于存储OpenCV的视频捕获对象&#xf…

期末考试的成绩怎么发?

随着学期末的临近&#xff0c;我们又迎来了向家长通报学生成绩的关键时刻。下面是一份成绩群发的全新指南&#xff0c;让我们一起高效而温馨地完成这项任务&#xff01; 1.选择沟通渠道&#xff1a; - 邮件与短信各有优势。邮件更适合提供详尽的成绩分析和评语&#xff0c;而短…

某同盾验证码

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

计算机组成原理 | 数据的表示、运算和校验(4)基本运算方法

补码加减&#xff08;运算与控制&#xff09; (-Y)补 [Y补]变补&#xff0c;这个要好好理解 (-Y)补&#xff1a;先将Y的符号位置反&#xff0c;在求-Y的补码&#xff08;数字为变反加1&#xff09; [Y补]变补&#xff1a;先求Y的补码&#xff08;数字为变反加1&#xff09;&…

shell的正则表达------awk

一、awk&#xff1a;按行取列 1.awk原理&#xff1a;根据指令信息&#xff0c;逐行的读取文本内容&#xff0c;然后按照条件进行格式化输出。 2.awk默认分隔符&#xff1a;空格、tab键&#xff0c;把多个空格自动压缩成一个。 3.awk的选项&#xff1a; awk ‘操作符 {动作}’…

微服务、多租户、单点登录、国产化形成的开源Java框架!

一、项目简介 JVS是软开企服构建的一站式数字化的开源框架&#xff0c;支持对接多种账户体系&#xff0c;支持多租户、支持Auth2、统一登录、单点登录等&#xff0c;支持原生开发、低代码/零代码开发应用。 二、框架核心功能 控制台(首页)&#xff1a;采用配置化的方式 用户…

Redis数据库(一):Redis数据库介绍与安装

Redis是一种高性能的开源内存数据库&#xff0c;支持多种数据结构&#xff08;如字符串、列表、集合等&#xff09;&#xff0c;具有快速的读写速度。它提供持久化、主从复制、高可用性和分布式部署等功能&#xff0c;适用于缓存、实时分析、消息队列等应用场景。Redis使用简单…

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

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

什么是绩效评价?绩效考核的五个标准包括哪些?

什么是绩效评价&#xff1f;绩效评价是指运用一定的评价方法、量化指标及评价标准&#xff0c;对中央部门为实现其职能所确定的绩效目标的实现程度&#xff0c;及为实现这一目标所安排预算的执行结果所进行的综合性评价。   绩效考核的五个标准有&#xff1a; 1、考核标准设置…

记一下 Stream 流操作

Java Stream流 创建流 Collection.stream() / Collection.parallelStream()&#xff1a;从集合生成流&#xff0c;后者为并行流。 List<String> list new ArrayList<>(); Stream<String> stream list.stream(); //获取一个顺序流 Stream<String> …

深度学习 --- stanford cs231学习笔记五(训练神经网络的几个重要组成部分之三,权重矩阵的初始化)

权重矩阵的初始化 3&#xff0c;权重矩阵的初始化 深度学习所学习的重点就是要根据损失函数训练权重矩阵中的系数。即便如此&#xff0c;权重函数也不能为空&#xff0c;总是需要初始化为某个值。 3&#xff0c;1 全都初始化为同一个常数可以吗&#xff1f; 首先要简单回顾一下…

【总线】AXI4第五课时:信号描述

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

保姆级 | Windows 复古风格终端样式设置

0x00 前言 前段时间有朋友询问我 Windows 终端的样式是如何设置的&#xff0c;我也进行了一些简单的回复。在之前的 Windows 11 版本中&#xff0c;系统提供了一个界面按钮&#xff0c;可以直接将终端样式设置为复古风格。然而&#xff0c;系统更新之后&#xff0c;这个按钮好像…

【UML用户指南】-22-对高级行为建模-事件和信号

目录 1、概述 2、事件分类 2.1、信号 2.2、调用事件 2.3、时间事件和变化事件 2.4、发送和接收事件 3、常用建模技术 3.1、对信号族建模 3.1.1、建立过程 3.2、对异常建模 在状态机语境中&#xff0c;使用事件对能够触发状态转移的激励建模。事件包括信号、调用、时间…

go语言day03

目录 一、 go语言的数据类型&#xff1a; 二、声明赋值的简写形式&#xff1a; ":" 1&#xff09;重复使用的编译错误 2&#xff09;在全局变量中使用 : 会报编译错误 三、变量规则&#xff1a; 0&#xff09;变量的命名规则&#xff1a; 1&#xff09;创建的局部…

Excel 宏录制与VBA编程 —— 12、文本字符串类型相关(附示例)

字符串分割&#xff0c;文末示例&#xff08;文末代码3附有源码&#xff09; 代码1 - 基础字符串 代码2 - 字符串拆分 代码3 - 字符串分割 Option ExplicitSub WorkbooksClear()Dim DataRange As RangeSet DataRange Range("C2:E12")DataRange.Clear End SubSub Wo…

PS添加物体阴影

一、选择背景&#xff0c;确保物体和北京分割出图层 二、右键单击物体图层&#xff0c;点击混合选项&#xff0c;点击投影 三、调整参数&#xff0c;可以看效果决定(距离是高度&#xff0c;扩展是浓度&#xff0c;大小是模糊程度)&#xff0c;保存即可

PhotoShop自动生成号码牌文件

1、说明 设计卡牌的时候&#xff0c;遇到自动生成编号&#xff0c;从01500到-02500&#xff0c;一个一个的手写&#xff0c;在存储保存成psd格式的文件&#xff0c;会很耗时。 下面将介绍如何使用ps自动生成psd格式的文件 2、使用excle生成数字 从01500到-02500 第一步&…

数据挖掘常见算法(关联)

Apriori算法 Apriori算法基于频繁项集性质的先验知识&#xff0c;使用由下至上逐层搜索的迭代方法&#xff0c;即从频繁1项集开始&#xff0c;采用频繁k项集搜索频繁k1项集&#xff0c;直到不能找到包含更多项的频繁项集为止。 Apriori算法由以下步骤组成&#xff0c;其中的核…

【Python/Pytorch 】-- K-means聚类算法

文章目录 文章目录 00 写在前面01 基于Python版本的K-means代码02 X-means方法03 最小二乘法简单理解04 贝叶斯信息准则 00 写在前面 时间演变聚类算法&#xff1a;将时间演变聚类算法用在去噪上&#xff0c;基本思想是&#xff0c;具有相似信号演化的体素具有相似的模型参数…