Alignement de chaines de caractères
Bonjour !
Je me suis inspiré de cette fonction sur wikipedia
Code:
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 "" |
pour faire ce bout de code, qui va aligner des séquences de lettres.
Code:
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]);
}
} |
Par exemple voici la sortie voulue pour cette entrée
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 !