public class LCS { public static String lcs(String s, String t) { int n = s.length(); int m = t.length(); int l[][] = new int[n+1][m+1]; for (int i = n-1; i >= 0; i--) { for (int j = m-1; j >= 0; j--) { char a = s.charAt(i); char b = t.charAt(j); if (a == b) { l[i][j] = 1 + l[i+1][j+1]; } else { l[i][j] = Math.max(l[i][j+1], l[i+1][j]); } } } StringBuilder result = new StringBuilder(); int i = 0; int j = 0; while (i < n && j < m) { char a = s.charAt(i); char b = t.charAt(j); if (a == b) { result.append(a); i++; j++; } else { if (l[i][j] == l[i+1][j]) { i++; } else { j++; } } } return result.toString(); } public static void main(String[] args) { String s = "ACCGAGTTCGGACTTA"; String t = "CCATTGCTCCCATTACGG"; System.out.println(lcs(s,t)); } }