首页 > 其他分享 >【力扣】最长公共子序列(动态规划)(还是得学套路才能会做)

【力扣】最长公共子序列(动态规划)(还是得学套路才能会做)

时间:2024-03-15 22:33:26浏览次数:24  
标签:得学 LCS 套路 s2 s1 力扣 数组 序列 dp

题目描述

image

分析

首先容易想出,dp数组的含义应该是两个字符串的最长公共子序列长度。
当两个字符串中的任意一个长度为0时,对应的LCS为0
由于同时受到两个数组的影响,所以dp数组应该设置为二维数组,
并且有:dp[i][j]代表的是s1的0-i的子序列与s2的0-j的子序列的LCS

然后分析递推公式:
调整ij的过程会出现三种情况:
1.s1[i] == s2[j]
在这种情况下,易得dp[i][j] == dp[i-1][j-1] + 1
2.两者不等的情况
在这种情况下,LCS仍然可能由于i和j向后的移动而增加。并且最多增加一个,但也可能都不增加
所以得到dp[i][j] == max(dp[i-1][j], dp[i][j-1])
image
在动态规划问题中,dp数组的定义,以及前后状态之间的关系是最重要的。
代码如下:

#include<bits/stdc++.h>
using namespace std;

int main(){
	string s1,s2;
	cin>>s1>>s2;
	vector<vector<int> > dp(s1.size()+1,vector<int>(s2.size()+1,0));
	
	for(int i = 1; i <= s1.size(); i++){
		for(int j = 1; j <= s2.size(); j++){
			
			if(s1[i-1] == s2[j-1]){
				dp[i][j] = dp[i-1][j-1] + 1;
			}else{
				dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
			}
			
		}
	}
	cout<<dp[s1.size()][s2.size()]; 
	return 0;
}

标签:得学,LCS,套路,s2,s1,力扣,数组,序列,dp
From: https://www.cnblogs.com/satsuki26681534/p/18076406

相关文章

  • 力扣刷题Days19-637.二叉树的层平均数
    目录1,题目2,代码2.1广度优先遍历2.2深度优先遍历3,学习与总结1,题目给定一个非空二叉树的根节点 root ,以数组的形式返回每一层节点的平均值。2,代码2.1广度优先遍历/***Definitionforabinarytreenode.*functionTreeNode(val,left,right){*......
  • 力扣刷题Days16 - 191.位1的个数(js)
    目录1,题目2,代码2.1逐位判断核心代码2.1.2逐位判断22.2位运算优化3,学习与总结1,题目编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为'1'的个数(也被称为汉明重量)。2,代码2.1逐位判断/***@param{number}n-apositivein......
  • 【力扣】目标和(新鲜的01背包题)
    题目描述分析01背包的题做起来最难的是把原问题转化成01背包题,通常需要写出题目中所有的数学关系,对公式进行化简后得到01背包的类型。在这种情景下还需要重新定义dp数组的含义于是连带的。dp数组的递推公式也要重新想大胆的按照五步骤结合题目分析的话其实并不是难到无......
  • 【力扣】分割等和子集(不太像01背包的01背包)
    题目描述分析出题人肯定是要尽量避免太直接的模版套用像这题一样,挖了很多坑。首先是题目很难让人第一时间联想到01背包这道题换一种描述方法就是找到一个子集,使子集的元素值总和刚好等于原集合之和的一半。也就是说是一个背包容量为sum/2的01背包问题另外,化解为这样之后你......
  • 力扣大厂热门面试算法题 27-29
            27.移除元素,28.找出字符串中第一个匹配项的下标,29.两数相除,每题做详细思路梳理,配套Python&Java双语代码,2024.03.14 可通过leetcode所有测试用例。目录27.移除元素解题思路完整代码PythonJava28.找出字符串中第一个匹配项的下标解题思路暴力匹......
  • 力扣大厂热门面试算法题 24-26
            24.两两交换链表中的节点,25.K个一组翻转链表,26.删除有序数组中的重复项,每题做详细思路梳理,配套Python&Java双语代码,2024.03.14 可通过leetcode所有测试用例。目录24.两两交换链表中的节点解题思路递归思路迭代思路完整代码PythonJava25.K个......
  • 拒绝被忽悠 买房看清开发商6个套路!
    想必买过房子的人都知道烂尾房以及五证不全的房子的危害吧?除此以外,还有部分小开发商的房子,户型做的不好不说,就连房屋质量都没法保证。因此想要明明白白买房,认清开发商的套路是很重要的!一、了解开发商实力购房者想了解开发商的实力可以通过当地专业的网站关键字搜索、专业刊物进......
  • 买房掌握这9大妙招 认清开发商的套路!
    相对于开发商来说,购房者往往属于弱势群体。由于很多购房者缺乏对房产知识以及法律知识的了解,很容易被开发商所“忽悠”。更有甚者发生纠纷时,购房者不知如何处理,导致自己的合法权益受到损害。那么想要明明白白买房,认清开发商的套路需要掌握哪些知识一、看五证了解开发商实力鉴别......
  • Offer必备算法13_路径dp_六道力扣题详解(由易到难)
    目录①力扣62.不同路径解析代码②力扣63.不同路径II解析代码③力扣LCR166.珠宝的最高价值解析代码④力扣931.下降路径最小和解析代码⑤力扣64.最小路径和解析代码⑥力扣174.地下城游戏解析代码本篇完。①力扣62.不同路径62.不同路径难度中等一个......
  • 力扣面试经典150 —— 16-20题
    力扣面试经典150题在VScode中安装LeetCode插件即可使用VScode刷题,安装DebugLeetCode插件可以免费debug本文使用python语言解题,文中“数组”通常指python列表;文中“指针”通常指python列表索引文章目录16.[困难]接雨水16.1解法1:按行计算16.2解......