最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
第一行给出一个整数N(0<N<100)表示待测数据组数
接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000.
每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
2
asdf
adfsd
123abc
abc123abc
3
6
dp
序列s1和序列s2
长度分别为l1和l2;
创建1个二维数组dp[m.n];
初始化dp数组内容为0
i和j分别从1开始,i++,i++循环:
如果s1[m] == s2[n],则dp[m,n] = dp[m - 1, n -1] + 1;
如果s1[m] != s2[n],则dp[m,n] = max{dp[m,n - 1],dp[m - 1, n]}
最后从dp[l1,l2]中的数字一定是最大的,且这个数字就是最长公共子序列的长度
从数组L中找出一个最长的公共子序列
Anything about this OnlineJudge, Please Contact Administrator. Click add QQ
OJ system based on HUSTOJ Project , UI based on Twitter Bootstrap
Copyright 2016 ACM算法攻关部cnt: 55893
关于网站改版