最长共公子序列

昨天学长的经验课没去,今天叫队友给你讲讲昨天的内容,也就简单一下DP,主要是帮助学弟们入门,还有后续的!

我也觉得没多少学到的,我就总结一下对最长共公子序列的经验吧!

最长共公子序列是对两个字符串,求出一个序列使得在两个字符串中都存在这个子序列应用动态规划的思想来解决它不失为一种理想的做法,这个倒是不太好形容,我先画个图!!

图中那些蝌蚪一样的东西是箭头啊,我偷懒就这样弄的- -!

看那个有ABCD的小框框,因为这个方法是从上往下一行一行,每行从左往右一个一个扫出结果的,所以当要求出D的时候,D的左边和右边的值全部都是已经求出来了的,这个没问题吧?接下来就是怎么求D了,如果D所在的位置对应的s1和s2中的字符相同,那么就是图中的s1[X]==s2[Y]的情况,可以理解为在比较s1和s2的这两个位置时,他们之前的都是比较好了的,而求这个二维数组里面存储的就是比较到这两个位置时的最长子序列,所以如果s1[X]==s2[Y],则子序列长度又可以加一了,但是为什么不是C或者B呢?C和D的Y相同,也就是取用的s2的字符相同,B和D是X相同,但是还需要注意的就是如果A+1还没有C或者B大的话肯定取最大的不是?这样一说清楚了以后,你就按照从上往下一行一行,每行从左往右一个一个求出来,写两遍你就自己领会了,真的,不信就再来一边,这次绝壁会理解透彻,要是还不懂,那撞死得了

时间: 2025-01-02 08:23:25

最长共公子序列的相关文章

算法复习——求最长不下降序列长度(dp算法)

题目: 题目背景 161114-练习-DAY1-AHSDFZ T2 题目描述 有 N 辆列车,标记为 1,2,3,-,N.它们按照一定的次序进站,站台共有 K 个轨道,轨道遵从先进先出的原则.列车进入站台内的轨道后可以等待任意时间后出站,且所有列车不可后退.现在要使出站的顺序变为 N,N-1,N-2,-,1,询问 K 的最小值是多少. 例如上图中进站的顺序为 1,3,2,4,8,6,9,5,7,则出站的顺序变为 9,8,7,6,5,4,3,2,1. 输入格式 输入共 2 行.第 1 行包含 1 

uva10405 - Longest Common Subsequence(LIS,最长共同自序列)

题目:uva10405 - Longest Common Subsequence(LIS,最长共同自序列) 题目大意:找出两个字符串中的最长公共的子序列. 解题思路:这类问题是第一次接触,不知道怎么做.百度了一下,发现了递推公式:dp[i][j]:代表第一个字符串的前i个字符和第二个字符串的前j个字符比较能得到的最长的公共子序列.s[i] == s[j] ,dp[i][j] = dp[i - 1][j - 1] + 1: s[i] != s[j] , dp[i][j] = Max (dp[i][

九度oj 题目1337:寻找最长合法括号序列

题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的左括号匹配.例如:((()))()()便是一个长度为10的合法括号序列,而(()))( 则不是. 需要你求解的是,找出最长的合法括号子序列的长度,同时找出具有这样长度的序列个数. 输入: 测试数据包括多个,每个测试数据包含两行: 第一行为一个整数N,其中N不会超过10^6. 第二行为一个长度为N的字

九度oj 题目1342:寻找最长合法括号序列II

题目描述: 假如给你一个由’(‘和’)’组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给你的任务便是去掉其中的一些括号,使得剩下的括号序列能够左右括号匹配且长度最长,即最长的合法括号序列. 输入: 测试数据包括多个,每个测试数据只有一行,即一个随机的括号序列,该括号序列的长度保证不超过106. 输出: 对于每个测试案例,输出一个整数,表示最后剩下的最长合法括号序列长度. 样例输入: (())() (() 样例输出: 6 2 这个题和1337求的是不一样的代码如下

ALBB 找公共最长连续字母序列的长度

问题描写叙述 给定一个 query 和一个 text .均由小写字母组成.要求在 text 中找出以相同的顺序连续出如今 query 中的最长连续字母序列的长度. 比如, query为"acbac".text为"acaccbabb",那么text中的"cba"为最长的连续出如今query中的字母序列,因此,返回结果应该为其长度3.请注意程序效率. 代码思想 1.遍历两字符串的每个元素,遇见同样元素则计算该次同样次数同样元素数目.并与之前最大值比較

最长连续字母序列的长度(阿里2015在线研发工程师笔试题)

给定一个query和一个text,均由小写字母组成.要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度.例如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3.请注意程序效率. 直接暴力,时间复杂度:m*n*n int Solve(char qu[],int n,char te[],int m) { int i,j; int k,p; int Max; in

华为机试测试- 求有序数组中最长的等差序列

原题目是求一个无序数组中最长的等差数列. 求随机数构成的数组中找到长度大于=3 的最长的等差数列, 输出等差数列由小到大:如果没有符合条件的就输出格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5] 思路: 1.排序 2.d的取值范围是[0,max-min],共有max-min+1种情况 3.对每一种情况进行查找 4.对于公差d,要求最长的等差序列,需要两个循环,一个外循环从头到尾遍历,内循环从外循环的起始遍历点开始利用公式 arr[i]=arr[start]+len*d,假如符合就长

[Jobdu] 题目1337:寻找最长合法括号序列

题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的左括号匹配.例如:((()))()()便是一个长度为10的合法括号序列,而(()))( 则不是. 需要你求解的是,找出最长的合法括号子序列的长度,同时找出具有这样长度的序列个数. 输入: 测试数据包括多个,每个测试数据包含两行: 第一行为一个整数N,其中N不会超过10^6. 第二行为一个长度为N的字

bzoj3173 最长上升自序列 块状链表

题意:动态插入数,求每次插完后的最长上升自序列长度.(N<=100000) 动态插入部分 块状链表 块状链表: split:分裂 O(sqrt(n)) merge:合并 O(sqrt(n)) insert:插入 具体做法是找到对应的块O(sqrt(n)),在该块内找到对应的点O(sqrt(n))split,merge(first,now),merge(now,second) maintain:整理 当两个相邻块sz和大于sqrt(n)时,merge,据说合并次数少,所以maintain操作也是O