Dans cette tâche, j'ai besoin d'obtenir la distance de hammage (la distance de hamming entre deux chaînes de longueur égale est le nombre de positions à laquelle les symboles correspondants sont différents - de Wikipedia) entre la séquence de deux chaînes1 et la séquence2.
Tout d'abord, j'ai fait 2 nouvelles chaînes qui sont les 2 cordes originales, mais les deux avec un boîtier abaissé pour rendre la comparaison plus facile. Ensuite, j'ai eu recours à la boucle pour la boucle et si pour comparer les 2 cordes. Pour toute différence de caractères dans ces 2 paires de chaîne, la boucle ajouterait 1 à un int x = 0. Les retours de la méthode seront la valeur de ce x. P>
public static int getHammingDistance(String sequence1, String sequence2) { int a = 0; String sequenceX = sequence1.toLowerCase(); String sequenceY = sequence2.toLowerCase(); for (int x = 0; x < sequenceX.length(); x++) { for (int y = 0; y < sequenceY.length(); y++) { if (sequenceX.charAt(x) == sequenceY.charAt(y)) { a += 0; } else if (sequenceX.charAt(x) != sequenceY.charAt(y)) { a += 1; } } } return a; }
4 Réponses :
Votre code est complètement éteint. Comme vous l'avez dit, la distance est le nombre d'endroits où les chaînes diffèrent - vous ne devez donc avoir 1 boucle que sur les deux cordes à la fois. Au lieu de cela, vous avez 2 boucles imbriquées qui comparent chaque index dans la chaîne A à chaque index de la chaîne b.
En outre, écrivez une condition IF résultant en Essayez cela à la place: P> A + = 0 code> est une perte de temps. p>
for (int x = 0; x < sequenceX.length(); x++) { //both are of the same length
if (sequenceX.charAt(x) != sequenceY.charAt(x)) {
a += 1;
}
}
Merci pour l'aide. Dans le cadre du problème, il fera très bien le travail. Merci encore: D
Votre code est correct, mais je vous suggère des améliorations suivantes.
charat () code> de chaîne. Obtenez de la grincement de la chaîne à l'aide de TOCHARARRAY () CODE> Avant de boucle, puis travaillez avec ce tableau. Ceci est plus lisible et plus efficace. LI>
-
la structure p>
if (sequenceX.charAt(x) == sequenceY.charAt(y)) {
a += 0;
} else if (sequenceX.charAt(x) != sequenceY.charAt(y)) {
a += 1;
}
"N'utilisez pas de charret () de la chaîne. Obtenez une matrice de charret à partir de la chaîne à l'aide de TOCHARARRAY () Avant de boucler, puis travaillez avec ce tableau. Ceci est plus lisible et plus efficace" -> Est-ce vraiment important quand vous avez juste Compilation de temps? Je veux dire que je ne l'ai pas testé par moi-même, mais j'imagine que le charat serait optimisé.
de mon point que la mise en œuvre suivante serait OK:
public static int getHammingDistance(String sequence1, String sequence2) { char[] s1 = sequence1.toCharArray(); char[] s2 = sequence2.toCharArray(); int shorter = Math.min(s1.length, s2.length); int longest = Math.max(s1.length, s2.length); int result = 0; for (int i=0; i<shorter; i++) { if (s1[i] != s2[i]) result++; } result += longest - shorter; return result; }
public static int getHammingDistance(String sequenceX, String sequenceY) { int a = 0; // String sequenceX = sequence1.toLowerCase(); //String sequenceY = sequence2.toLowerCase(); if (sequenceX.length() != sequenceY.length()) { return -1; //input strings should be of equal length } for (int i = 0; i < sequenceX.length(); i++) { if (sequenceX.charAt(i) != sequenceY.charAt(i)) { a++; } } return a; }
tout ce que je pouvais faire pour corriger code> est une question qui appartient ici.
optimiser code> question appartient au code de code
Cette question est mieux adaptée à codereview.stackexchange.com . Vous obtiendrez aussi des réponses plus agréables.
De plus, votre code n'émet pas une réponse correcte. J'ai testé avec ABCD et ABDD, la sortie est 12
Avez-vous regardé la distance de Levenshtein? Il y a beaucoup de bibliothèques qui font cela, y compris Apache Commons
@isti_spl Notez que l'étiquette de devoirs a été désolved: meta.stackexchange.com/questions/147100/...