Schnellste Methode zum Entfernen doppelter Zeichen in String (C #)

8

Was ist in C # der schnellste Weg, doppelte Zeichen in einem String zu erkennen und zu entfernen (Entfernen einschließlich der ersten Instanz des duplizierten Zeichens)?

Beispieleingabe: nbHHkRvrXbvkn

Beispielausgabe: RrX

    
Alex 27.08.2009, 21:49
quelle

5 Antworten

21

Am schnellsten wie in den wenigsten Zeilen:

%Vor%

Am schnellsten wie bei der schnellsten Leistung wäre wahrscheinlich so etwas (bewahrt die Reihenfolge nicht):

%Vor%

Leistungstest

Im Zweifelsfall - teste es:)

%Vor%     
dtb 27.08.2009, 21:55
quelle
9

Hier ist eine ziemlich schnelle Erhaltungsreihenfolge. Aber ich bin ein bisschen besorgt darüber, wie LINQ Group und Where:

%Vor%

Bearbeiten: Dieser schlägt Lukes in einigen Fällen immer noch langsamer als dtb, aber es behält die Reihenfolge

%Vor%     
Yuriy Faktorovich 27.08.2009 22:16
quelle
4

Dieser sollte ziemlich schnell sein (und die ursprüngliche Reihenfolge beibehalten):

%Vor%     
LukeH 27.08.2009 22:28
quelle
2

Dies erhält die Reihenfolge und ist basierend auf meinen Tests viermal schneller als die Verwendung eines HashSets. Dies setzt voraus, dass dein Zeichenbereich 0-255 ist, aber du kannst das problemlos erweitern. Wenn Sie dies in einer Schleife verwenden möchten, verschieben Sie int[] c = new int[255]; und in der Funktion Array.Clear(c,0,255) .

%Vor%     
gabe 28.08.2009 16:00
quelle
0

Dieser Algorithmus ist allgemein, kann auf jede Sprache angewendet werden

  1. Erstellen Sie eine Map (HashTable) char- & gt; int, die die Anzahl der gefundenen Zeichen enthält, die anfänglich leer sind
  2. scannen Sie die Zeichenfolge einmal, um die Karte zu füllen.
  3. Erstellen Sie eine neue leere Zeichenfolge, die die Ausgabe enthält, möglicherweise müssen Sie einen StringBuilder verwenden.
  4. scannt die Zeichenkette (oder die Karte, je nachdem, welche kürzer ist) und kopiert nur Zeichen, deren Vorkommen 1 ist, in die Ausgabezeichenfolge / StringBuilder
Diaa Sami 27.08.2009 21:59
quelle

Tags und Links