import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.next();
String s2 = sc.next();
f(s1,s2);
sc.close();
}
private static void f(String s1, String s2) {
int n = s1.length();
int m = s2.length();
int lcs[][] = new int[n+1][m+1];
String l[][] = new String[n+1][m+1];
for(int i=0;i<=n;i++) {
for(int j=0;j<=m;j++) {
if(i==0||j==0) {
lcs[i][j] = 0;
l[i][j] = "";
}
else if(s1.charAt(i-1)==s2.charAt(j-1)) {
lcs[i][j] = lcs[i-1][j-1]+1;
l[i][j] = l[i-1][j-1] + s1.charAt(i-1);
}
else {
lcs[i][j] = max(lcs[i-1][j],lcs[i][j-1]);
if(lcs[i-1][j]>=lcs[i][j-1])
l[i][j] = l[i-1][j];
else
l[i][j] = l[i][j-1];
}
}
}
System.out.println(l[n][m]);
System.out.println(lcs[n][m]);
}
private static int max(int i, int j) {
return i>j?i:j;
}
}
最长公共子序列
最新推荐文章于 2021-05-16 21:27:58 发布