Während ein Buch Cracking the coding interview
von Gayle Laakmann
namens lesen, ich kam in dieser FrageEntfernen von doppeltem Charakter von Array
Entwurf einen Algorithmus und Code schreiben, um die doppelten Zeichen in einer Zeichenfolge zu entfernen, ohne dass zusätzliche Puffer. HINWEIS: Ein oder zwei zusätzliche Variablen sind in Ordnung. Eine zusätzliche Kopie des Arrays ist nicht.
und dieser Code: -
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;
}
die doppelte Zeichen aus dem Array entfernen soll. Ich verstehe nicht, was der Algorithmus tut, indem ich das gleiche Zeichen immer wieder ersetze. Ich dachte, dass nur ich der Meinung bin, dass der Algorithmus nicht funktioniert, aber tatsächlich, wenn ich diesen Code lief, gibt er mir falsche Ausgaben. Ist das ein ernster Fehler im Buch oder habe ich die Frage nicht verstanden?
Dieser Code schlägt auch fehl, wenn die Eingabe "aa" ist –
für char [] str = {'a', 'a'}; es gibt [a,] – EMM