Die überprüfung, ob 2 strings enthalten die gleichen Charaktere?
Gibt es eine Möglichkeit zu überprüfen, ob zwei strings enthalten die gleichen Zeichen. Zum Beispiel,
abc, bca -> true
aaa, aaa -> true
aab, bba -> false
abc, def -> false
- möglich, Duplikat der die Überprüfung, ob zwei strings sind Permutationen jeder andere
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jeden string in ein char[], array Sortieren, dann die beiden vergleichen. Einfach.
Arrays.equals
, nichtequal
.Sehr einfach - aber nicht sehr effizienten Weg, dies zu tun ist, konvertieren Sie Ihre
String
s um char-arrays und java.util.Arrays.Sortieren Sie Sie, erhalten SieString
s zurück und vergleichen auf Gleichheit.Wenn deine Saiten sind unter ein paar tausend Zeichen, das sollte sehr okay.
Wenn Sie mehrere Megabyte Zeichenfolgen, die Sie erstellen möchten, die ein array mit einem Zähler für jeden Buchstaben (mit its-code als index), haben einen pass, auf der einen string hinzufügen, die auf der Anzahl der einzelnen char, und einem pass auf der zweiten saite entfernen. Wenn Sie fallen unter 0 zu einem beliebigen Zeitpunkt während der zweite pass, Sie haben nicht die gleichen Zeichen. Wenn du fertig bist mit der zweiten Zeichenkette ohne Fehler, Sie sind sicher, Sie haben die gleichen Zeichen, wenn Sie die gleiche Länge haben (das sollte man sowieso zuerst geprüft).
Diese zweite Methode ist viel komplizierter als das Sortieren der strings, und es erfordert eine große Auswahl, wenn Sie wollen, um mit unicode-strings arbeiten, aber es ist absolut gut, wenn Sie in Ordnung sind nur die 128 Zeichen der ascii-Satz, und viel schneller.
Kümmern Sie sich NICHT, wenn Sie nicht mehrere Millionen Zeichen in den Zeichenfolgen. Die Sortierung der Zeichenketten wird viel einfacher, und nicht wesentlich langsamer auf strings mit nur ein paar Dutzend chars.
Als (Erbsenzählerei 😉 ) Anmerkung:
Bewusst sein, dass die vorgeschlagenen Lösungen hier funktionieren nur für Zeichenfolgen bestehend aus Zeichen aus dem Basic Multilingual Plane (BMP) von Unicode.
Zeichen außerhalb der BMP werden durch ein paar von
char
imString
, so dass Sie brauchen, um zusätzliche Aufmerksamkeit zu schenken, so halten Sie die Paare zusammen. Siehe Javadocs vonjava.lang.Character
für die blutigen details.Glücklicherweise sind die meisten Zeichen außerhalb der BMP sind eher Exoten. Auch die meisten Japaner und Chinesen ist in den Formaten BMP...
char
.Wenn Sie dann aufrufen z.B.Arrays.sort(chars1)
, die Sortieren-Funktion, die nicht wissen, über Surrogate, gerne zerreißen das entwickeln und produzieren von junk-Daten. Oder bin ich etwas fehlt?Vielleicht ist es nicht die Schnellste Antwort, aber es muss sein, die kürzeste Antwort.
Können Sie konvertieren den string in char-array, Sortieren Sie die Felder, und Sie vergleichen die arrays:
Erstellen Sie eine Signatur für eine bestimmte Zeichenfolge. Mit count und Charakter.
a-count:b-count:c-count:.....:z-count:
(reicht für Obere Falle, wenn Sie wollen ).Dann vergleichen Sie die Unterschrift. Dies sollte eine bessere Skalierung für sehr große Strings.
Als Verknüpfung, überprüfen Sie die Länge. Wenn Sie nicht passen, zurückgeben sowieso falsch.
hier:
Hier:
public class CompareString {
}