动态规划之最长公共子序列
来源:互联网 发布:小猪生活通源码 编辑:程序博客网 时间:2024/05/16 14:31
import java.util.Scanner;public class Main { static Scanner scin = new Scanner(System.in); public static void main(String[] args) { int size = Integer.valueOf(scin.nextLine()); while (size-- > 0) { String str1 = scin.nextLine(); String str2 = scin.nextLine(); System.out.println(lcs(str1, str2)); } } static String lcs(String str1, String str2) { char[] char1 = (" " + str1).toCharArray(); char[] char2 = (" " + str2).toCharArray(); int l1 = char1.length; int l2 = char2.length; int[][] length = new int[l1][l2]; for (int i = 1; i < l1; i++) for (int j = 1; j < l2; j++) { if (char1[i] == char2[j]) { length[i][j] = length[i - 1][j - 1] + 1; } else { length[i][j] = length[i][j - 1] < length[i - 1][j] ? length[i - 1][j] : length[i][j - 1]; } } l1--; l2--; StringBuilder sb = new StringBuilder(); while (l1 > 0 && l2 > 0) { if (char1[l1] == char2[l2]) { sb.append(char1[l1]); l1--; l2--; } else { if (length[l1][l2 - 1] > length[l1 - 1][l2] ) { l2--; } else { l1--; } } } return sb.toString(); }}