Entfernen von doppelten Zeichen aus array
Während Sie Lesen ein Buch namens Cracking the coding interview
durch Gayle Laakmann
stieß ich auf diese Frage
Entwerfen Sie einen Algorithmus und schreiben Sie den code zum entfernen der doppelte Zeichen
in einem string ohne zusätzlichen Puffer. HINWEIS: Eine oder zwei
weitere Variablen sind in Ordnung. Eine zusätzliche Kopie des Arrays 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;
}
entfernen soll doppelte Zeichen aus dem array. Ich glaube nicht, ruhig scheinen zu verstehen, was der Algorithmus tut, durch den Austausch den gleichen Charakter immer und immer wieder. Ich dachte, es ist nur mir, wer fühlt, dass der Algorithmus nicht funktioniert, aber ehrlich gesagt, bei mir lief dieser code ermöglicht mir falsche Ausgänge. Ist diese schwerwiegenden Fehler im Buch oder hab ich die Frage nicht verstanden?
InformationsquelleAutor TCM | 2010-08-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Algo scheint zu funktionieren, aber nicht deaktivieren, übrig gebliebene Zeichen.
Geänderte code Folgendes ein, und es funktioniert:
Hinweis: Ersetzt:
mit :
für char[] str = {'a','a'}; es gibt [einen, ]
InformationsquelleAutor YoK
Einer Lösung mit einem bit-Vektor.
Zeit: O(n), wo
n = length of the string
Platz: O(1)
InformationsquelleAutor Thiago
In Java sind arrays mit fester Größe. Damit die aufgerufene Funktion kann nicht ändern Sie die Größe des Arrays input, wenn es findet alle Duplikate. Ihre Funktion ist nur der start-index des sub-array die Duplikate zu
0
. Also, wenn Sie drucken Sie das array-Inhalt in die aufrufende Funktion das element, das gemacht worden ist0
nicht gedruckt, sondern Elemente Folgen (wenn überhaupt) bekomme gedruckt.Die Antwort von YoK macht alle Elemente des sub-Arrays, die Duplikate sind auf 0. So dass, wenn Sie es gedruckt in der aufrufenden Funktion, die Duplikate nicht gedruckt werden. Aber Sie müssen Bedenken, dass die Größe des Arrays ist immer noch unverändert.
Alternativ können Sie wieder die Größe der sub-array die einzigartige Zeichen. Die in Ihrem Fall ist
tail
.Eine weitere alternative ist die übergabe der input-als
StringBuffer
und nehmen Sie die änderungen in-place als:Ideone Link
InformationsquelleAutor codaddict
Ist dies eine Lösung mit C++ und Rekursion, um eine Schleife durch jedes Zeichen der Zeichenfolge und unter Verwendung der oben genannten Methode bitstring in eine Feste Breite, char. Sie müssen sicherstellen, dass die Feste Breite Zeichenkette ist länger als die erforderlichen k-Typ-Zeichen zu prüfen.
InformationsquelleAutor Ethan Lim
Improvisierte ich code von YoK zu vermeiden, mit
Stattdessen können wir uns set blank in der ersten Schleife.
InformationsquelleAutor Sangan K