描述
咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
- 输入
-
第一行给出一个整数N(0<N<100)表示待测数据组数 接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000.
- 输出
-
每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
- 样例输入
-
2 asdf adfsd 123abc abc123abc
- 样例输出
-
3 6
AC代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 #define N 1006 6 char s1[N],s2[N]; 7 int dp[N][N]; 8 int main() 9 { 10 int t; 11 scanf("%d",&t); 12 while(t--){ 13 memset(dp,0,sizeof(dp)); 14 scanf("%s",s1); 15 scanf("%s",s2); 16 int len1 = strlen(s1); 17 int len2 = strlen(s2); 18 for(int i=0;i<len1;i++){ 19 for(int j=0;j<len2;j++){ 20 if(s1[i]==s2[j]){ 21 dp[i+1][j+1]=dp[i][j]+1; 22 }else{ 23 dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]); 24 } 25 } 26 } 27 printf("%d ",dp[len1][len2]); 28 } 29 return 0; 30 }