Responsive image

问题 1542 --最长公共子序列

1542: 最长公共子序列

时间限制: 1 Sec  内存限制: 128 MB
提交: 4  解决: 6
[提交][状态][讨论版][命题人:]

题目描述

最长公共子序列也称作最长公共子串(不要求连续),英文缩写为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中找出一个最长的公共子序列

来源

[提交][状态]
ACM算法攻关部