首页 > 其他分享 >Leetcode 1143. 最长公共子序列

Leetcode 1143. 最长公共子序列

时间:2023-09-29 22:55:26浏览次数:51  
标签:1143 text2 字符串 text1 公共 序列 Leetcode dp

https://leetcode.cn/problems/longest-common-subsequence/description/?envType=study-plan-v2&envId=top-100-liked

给定两个字符串 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 仅由小写英文字符组成。

dp模板
dp[i][j]表示 text1到第i个位置,和text2的第j个位置 能获取的最长公共子序列长度。
转移公式如下
如果text1[i] == text2[j];
那么dp[i][j] = dp[i-1][j-1]+1;
如果text[i]!=text2[j]
那么dp[i][j] 取 dp[i][j-1] dp[i-1][j] 的较大值

class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        vector<vector<int>> dp(1010, vector<int>(1010));
        text1.insert(text1.begin(), '@');
        text2.insert(text2.begin(), '#');
        for (int i = 1; i < text1.size(); i++) {
            for (int j = 1; j < text2.size(); j++) {
                if (text1[i] == text2[j]) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }
                else {
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }
        
        cout <<  dp[text1.size() - 1][text2.size() - 1];
        return dp[text1.size() - 1][text2.size() - 1];
    }
};

视频题解空间

标签:1143,text2,字符串,text1,公共,序列,Leetcode,dp
From: https://www.cnblogs.com/itdef/p/17737477.html

相关文章

  • 《Java编程思想第四版》学习笔记32--关于static字段的序列化
    //:CADState.java//Savingandrestoringthestateofa//pretendCADsystem.importjava.io.*;importjava.util.*;abstractclassShapeimplementsSerializable{publicstaticfinalintRED=1,BLUE=2,GREEN=3;privateintxPos,yPos,dimension;p......
  • 最大上升子序列和
    题目概述:给定一个序列,求解该序列的最大上升子序列的和解题思路:我们在LIS的集合定义为:以i结尾的上升子序列的最大长度,那其实我们只需要将集合定义改为:以i结尾的上升子序列的最大和即可。#include<iostream>#include<algorithm>#include<cstring>#include<set>#include<v......
  • [LeetCode] 2251. 花期内花的数目 - 二分查找/有序数组
    Problem:2251.花期内花的数目思路看题目应该是一道比较经典的差分,本来准备拿差分数组做的,后来搂了一眼题解,发现用二分的方法更简单解题方法此题有一种很简便的方法,第i个人到达时间为people[i],所以我们不难找到在这个时间之前花期已经开始的花的数量,即v1=start<=people[i]......
  • R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证
    全文链接:http://tecdat.cn/?p=31162最近我们被客户要求撰写关于SV模型的研究报告,包括一些图形和统计输出。本文做SV模型,选取马尔可夫蒙特卡罗法(MCMC)、正则化广义矩估计法和准最大似然估计法估计。模拟SV模型的估计方法:  sim<-svsim(1000,mu=-9,phi=0.97,sigma......
  • R语言Copula对债券时间序列数据的流动性风险进行度量|附代码数据
    全文链接:http://tecdat.cn/?p=32707原文出处:拓端数据部落公众号在金融市场中,债券的流动性风险一直是一个备受关注的问题。流动性风险是指在市场上,债券价格的波动程度受到市场流动性的影响,这种影响可能导致债券价格的剧烈波动,从而影响投资者的收益。因此,对于债券流动性风险的度量......
  • [leetcode] 30. 串联所有单词的子串
    题目30.串联所有单词的子串给定一个字符串s和一个字符串数组words。words中所有字符串长度相同。s中的串联子串是指一个包含words中所有字符串以任意顺序排列连接起来的子串。例如,如果words=["ab","cd","ef"],那么"abcdef","abefcd","cdabef","cdefab",&quo......
  • Java序列serialVersionUID字段
    Spring框架默认使用Java的序列化机制,也就是说,Spring默认使用Java的内置序列化器。Java的序列化机制中,每个序列化的对象都有一个serialVersionUID字段,这个字段用来标识序列化对象的版本。Java的序列化机制是这样的:当一个对象被序列化时,Java会先检查对象的类是否有一个名为"serialV......
  • NOJ[1143] 字母转换
    描述:通过栈交换字母顺序。给定两个字符串,要求所有的进栈和出栈序列(i表示进栈,o表示出栈),使得字符串2在求得的进出栈序列的操作下,变成字符串1。输出结果需满足字典序。例如TROT到TORT:[iiiiooooioiiooio]输入:给定两个字符串,第一个字符串是源字符串,第二个字符......
  • [LeetCode] 1333. 餐厅过滤器
    Problem:1333.餐厅过滤器思路这道题目拿到手基本可以确定是一道大模拟题,基本思路在题目里面已经确定,主要的难点就在对结果的排序上,需要指定sort的排序规则解题方法首先对题目中给出的数组依照题目要求的过滤器规则进行遍历过滤,然后形成一个过滤后的新数组filtered,接着按照......
  • 《prufer 序列》小记
    今天模拟赛被卡科技了,学一下这个东西,之前也看到很多次,只不过一直都没学。算法简介这是一种可以将带标号的树,转成唯一的整数序列表示的方法。而在“数树”题中也有大用。算法流程大概是将带标号的\(n\)个节点的数用\([1,n]\)中的\(n-2\)个整数来表示一个树。也可以理解成......