题目
题意:给出两个字符串,求出两个字符串的最长公共子序列
思路:LCS输出公共子串(逆序)
AC代码:
import java.util.*;
import java.math.*;
public class Main {
static Scanner sc=new Scanner(System.in);
public static void main(String[] args) {
int n=1;
for(int i=0;i<n;i++) {
show();
}
}
static int arr[][]=new int [3100][3100];
private static void show() {
char a[]=sc.next().toCharArray();
char b[]=sc.next().toCharArray();
for(int i=a.length-1;i>=0;i--) {
for(int j=b.length-1;j>=0;j--) {
if(a[i]==b[j]) {
arr[i][j]=arr[i+1][j+1]+1;
}else {
arr[i][j]=Math.max(arr[i+1][j], arr[i][j+1]);
}
}
}
// for(int i=0;i<=a.length;i++) {
// System.out.println(Arrays.toString(arr[i]));
// }
// System.out.println(arr[a.length][b.length]);
int i=0,j=0;
StringBuilder s=new StringBuilder();
while(i<a.length&&j<b.length) {
if(a[i]==b[j]) {
s.append(a[i]);
i++;
j++;
}else if(arr[i][j]==arr[i+1][j]){
i++;
}else {
j++;
}
}
//System.out.println(i+" "+j);
System.out.println(s);
}
}