Bonjour !
Je me suis inspiré de cette fonction sur wikipedia
pour faire ce bout de code, qui va aligner des séquences de lettres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 function printDiff(C[0..m,0..n], X[1..m], Y[1..n], i, j) if i > 0 and j > 0 and X[i] = Y[j] printDiff(C, X, Y, i-1, j-1) print " " + X[i] else if j > 0 and (i = 0 or C[i,j-1] ≥ C[i-1,j]) printDiff(C, X, Y, i, j-1) print "+ " + Y[j] else if i > 0 and (j = 0 or C[i,j-1] < C[i-1,j]) printDiff(C, X, Y, i-1, j) print "- " + X[i] else print ""
Par exemple voici la sortie voulue pour cette entrée
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 public static void printDiff(int opt[][], char input1[], char input2[], int i, int j) { if (i > 0 && j > 0 && input1[i] == input2[j]) { printDiff(opt, input1, input2, i-1, j-1); //System.out.print("" + input1[i]); } else if (j > 0 && (i == 0 || opt[i][j-1] >= opt[i-1][j])) { printDiff(opt, input1, input2, i, j-1); System.out.print("-" + input2[j]); } else if (i > 0 && (j == 0 || opt[i][j-1] < opt[i-1][j])) { printDiff(opt, input1, input2, i-1, j); //System.out.print("-" + input1[i]); } else { System.out.print(input1[i]); } }
Entrée
ABCDE
ACDC
Sortie Désirée
ABCDE-
A-CD-C
Sortie actuelle
A-C-D-C
Le problème est que je ne sais pas comment faire en sorte que l'algo ajoute +1 lorsqu'un tiret est ajouté pour que la chaine soit alignée. Clairement dans mon code, il ne considère pas le tiret donc la boucle continue de voir des différences dans mes chaines.
Je veux pricipalement utiliser cette facon de faire, car je vais devoir refaire le même programme en assembleur et je suis très limité dans les fonctions et espace memoire.
Merci !
Partager