题目描述
最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
输入
第一行给出一个整数N(0<N<100)表示待测数据组数
接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000.
输出
每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
样例输入
2
asdf
adfsd
123abc
abc123abc
样例输出
3
6
代码(Java版)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int cnt=cin.nextInt();
while (cnt--!=0){
String[] str=new String[]{cin.next(),cin.next()};
int[][] dp=new int[str[0].length()+1][str[1].length()+1];
for(int i=1;i<=str[0].length();i++){
for(int j=1;j<=str[1].length();j++){
if(str[0].charAt(i-1)==str[1].charAt(j-1)){
dp[i][j]=dp[i-1][j-1]+1;
}else {
dp[i][j]= Math.max(dp[i][j-1],dp[i-1][j]);
}
}
}
System.out.println(dp[str[0].length()][str[1].length()]);
}
}
}
dp(i,j)表示str0[0…i]和str1[0…j]中最长子序列的长度