Anzahl der Zeichen zwischen zwei Zeichenfolgen in C # ermitteln

8

Ich suche nach einer Methode, die zwei Zeichenfolgen verwendet und die Anzahl der Zeichen zurückgibt, die beiden gemeinsam sind:

"G010" & amp; "G1820A" sollte 3 zurückgeben, da die Zeichen G, 0 und 1 in beiden existieren.

Wenn ein Zeichen zweimal in beiden vorhanden ist, sollten sie wie folgt getrennt gezählt werden:

"G12AA" & amp; "GAA2" sollte 4 zurückgeben, da die Zeichen G, A, A und 2 in beiden existieren.

Irgendwelche Hilfe dabei? Google-Suchanfragen waren bisher nicht sehr hilfreich.

    
Tommy 13.02.2014, 08:55
quelle

8 Antworten

4

Versuchen Sie es

%Vor%     
Matt Webber 13.02.2014 09:14
quelle
3

Okay, wie wäre es damit, es hat den Vorteil, dass Sie die Lazy-Evaluierung maximieren und die String-Manipulation minimieren.

%Vor%

Im Wesentlichen gruppiert es jede Seite mit Char und findet dann Zeichen, die auf beiden Seiten eine Gruppe haben. Die übereinstimmenden Gruppen werden im Tandem gezählt, bis einer der beiden ausläuft. Diese Zählungen werden summiert, um das Ergebnis zu erzeugen.

Es wäre trivial, dies generisch für zwei beliebige Sequenzen durchzuführen. Siehe unten,

%Vor%

Was würdest du so benutzen?

%Vor%

Der optionale Parameter comparer kann sich als nützlich erweisen, wenn Sie eine Groß- / Kleinschreibung oder andere spezielle Behandlung benötigen.

Im Interesse der Wiedererlangbarkeit wäre ich versucht, die Sum() zu entfernen und eine IEnumerable<T> zurückzugeben und dann dem Aufruf eine Summe hinzuzufügen, so

%Vor%

Sie könnten das leicht tun

%Vor%

oder nur das Original

%Vor%     
Jodrell 13.02.2014 10:47
quelle
1

Sie könnten Linq verwenden, um dieses Problem zu lösen, indem Sie etwas wie folgt verwenden:

%Vor%

commonChars hat den Wert 3. Die FindCommonElements-Methode wurde von dieser Frage inspiriert: Wie mache ich eine Integer-Liste Schnittpunkt, während Duplikate beibehalten?

    
Vincent 13.02.2014 09:18
quelle
1
%Vor%     
Amit 13.02.2014 09:38
quelle
1

Mit Linq machen:

%Vor%     
nima 13.02.2014 10:18
quelle
0

Dieser würde schneller mit größeren Eingaben laufen, da er keine Verschachtelungsschleifen macht, sondern eher von einer Hash-Suche mit dem Dictionary abhängt. Auf der anderen Seite verwendet es mehr Speicher.

%Vor%     
cellik 13.02.2014 09:53
quelle
0
%Vor%

überprüfe das, aber nicht effizient. Aber hab es richtig gemacht.

    
Riyas 22.11.2017 13:54
quelle
-3

Bitte überprüfen Sie den folgenden Code - & gt; src ist die erste Zeichenfolge, während chk die zweite Zeichenfolge ist

  

var count = 0; var i = 0;   src.ToList (). ForEach ((x) = & gt;)           while (chk.Substring (i) .IndexOf (x) & gt; = 0)           {
              zählen ++;               i ++;               wenn (i & gt; chk.Length) bricht;           }
  });

    
rt2800 13.02.2014 09:06
quelle