动态规划之最长公共子序列

来源:互联网 发布:小猪生活通源码 编辑:程序博客网 时间: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();    }}

原创粉丝点击