1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| public static void main(String[] args) {
new LCS().align("MKNLASREVNIYVNGKLV", "QMASREVNIYVNGKL");
}
public static void align(String a, String b) {
int[][] T = new int[a.length() + 1][b.length() + 1];
for (int i = 0; i <= a.length(); i++) {
T[i][0] = i;
}
for (int i = 0; i <= b.length(); i++) {
T[0][i] = i;
}
for (int i = 1; i <= a.length(); i++) {
for (int j = 1; j <= b.length(); j++) {
if (a.charAt(i - 1) == b.charAt(j - 1)) {
T[i][j] = T[i - 1][j - 1];
} else {
T[i][j] = Math.min(T[i - 1][j], T[i][j - 1]) + 1;
}
}
}
for (int i = a.length(), j = b.length(); i > 0 || j > 0;) {
if (i > 0 && T[i][j] == T[i - 1][j] + 1) {
--i;
System.out.print('-');
} else if (j > 0 && T[i][j] == T[i][j - 1] + 1) {
System.out.print(b.charAt(--j));
} else if (i > 0 && j > 0 && T[i][j] == T[i - 1][j - 1]) {
--i;
System.out.print(b.charAt(--j));
}
}
System.out.println("");
for (int i = a.length(), j = b.length(); i > 0 || j > 0;) {
if (i > 0 && T[i][j] == T[i - 1][j] + 1) {
System.out.print(a.charAt(--i));
} else if (j > 0 && T[i][j] == T[i][j - 1] + 1) {
--j;
System.out.print('-');
} else if (i > 0 && j > 0 && T[i][j] == T[i - 1][j - 1]) {
--j;
System.out.print(a.charAt(--i));
}
}
System.out.println("");
} |
Partager