LCS

来源:互联网 发布:创维电视使用网络电视 编辑:程序博客网 时间:2024/06/07 03:25

import java.util.Timer;

public class LCS {
static int[][] memoryDP = new int[100][100];

public static void main(String[] args) {    String str1 = "abfdasgffdvddgfdvcq";    String str2 = "vfdcsdcewfedsesq";    // fdsq    long timeMillis = System.currentTimeMillis();    int length = lcs(str1, str2, str1.length(), str2.length());    System.out.println(System.currentTimeMillis() - timeMillis);    long timeMillis2 = System.currentTimeMillis();    System.out.println(length);    int length2 = lcsDP(str1, str2, str1.length(), str2.length());    System.out.println(System.currentTimeMillis() - timeMillis2);    System.out.println(length2);}// 递归 +DPprivate static int lcsDP(String str1, String str2, int m, int n) {    if (m == 0 || n == 0) {        return 0;    }    if (memoryDP[m - 1][n - 1] != 0) {        return memoryDP[m - 1][n - 1];    } else if (str1.charAt(m - 1) == str2.charAt(n - 1)) {        memoryDP[m - 1][n - 1] = lcs(str1, str2, m - 1, n - 1) + 1;        return memoryDP[m - 1][n - 1];    }    memoryDP[m - 1][n - 1] = max(lcs(str1, str2, m - 1, n), lcs(str1, str2, m, n - 1));    return memoryDP[m - 1][n - 1];}// 递归private static int lcs(String str1, String str2, int m, int n) {    if (m == 0 || n == 0) {        return 0;    }    if (str1.charAt(m - 1) == str2.charAt(n - 1)) {        return lcs(str1, str2, m - 1, n - 1) + 1;    } else {        return max(lcs(str1, str2, m - 1, n), lcs(str1, str2, m, n - 1));    }}private static int max(int lcs1, int lcs2) {    return lcs1 > lcs2 ? lcs1 : lcs2;}

}