Bonjour, j'ai une fonction qui fait partiellement ce que je veux. Elle est supposée aligner des chaines de charactères en place mais le tout est inversé, les charactères sont dans le mauvais ordre. J'ai asseyé en vain d'iverser les deux for avec des incrémenteurs positifs mais cela ne marche pas, qu'est-ce que j'ai manqué ?
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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