Durante la lettura di un libro chiamato Cracking the coding interview
da Gayle Laakmann
, mi sono imbattuto in questa domandaRimozione carattere duplicato gamma
Progettare un algoritmo e scrivere il codice per rimuovere i caratteri duplicati in una stringa senza utilizzare alcun buffer aggiuntivo. NOTA: una o due variabili aggiuntive vanno bene. Una copia extra dell'array non lo è.
e questo codice: -
public static void removeDuplicates(char[] str) {
if (str == null) {
return;
}
int len = str.length;
if (len < 2) {
return;
}
int tail = 1;
for (int i = 1; i < len; ++i) {
int j;
for (j = 0; j < tail; ++j) {
if (str[i] == str[j]) {
break;
}
}
if (j == tail) {
str[tail] = str[i];
++tail;
}
}
str[tail] = 0;
}
che si suppone per rimuovere carattere duplicato dalla matrice. Non sto tranquillo, sembra capire cosa sta facendo l'algoritmo sostituendo lo stesso personaggio ancora e ancora. Ho pensato che sono solo io a sentire che l'algoritmo non funziona, ma infatti quando ho eseguito questo codice mi stanno dando delle uscite sbagliate. Questo grave errore è nel libro o non ho capito la domanda?
questo codice fallisce anche se l'ingresso è "aa" –
per char [] str = { 'a', 'un'}; dà [a,] – EMM