2 Wörter vergleich -> gleiche Buchstaben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Wie würdet ihr am einfachsten überprüfen ob 2 Wörter genau die gleichen Buchstaben enthalten? (Reihenfolge egal, Anzahl ist wichtig)

z.B.
funktion('abcdefg', 'abgfcde') -> True
funktion('abcdefg', 'abgffde') -> False

Ich würde das schon hinkriegen aber nur mit mühsamen Mitteln.

Was mir spontan einfällt ist ein Dict (buchstabe -> anzahl) zu erstellen und jeden Key überprüfen ob er die gleiche Anzahl hat, aber das sieht mir recht aufwendig aus um nur 2 Wörter zu vergleichen.

Hat jemand eine bessere Idee?

Ach ja die 2 Wörter sind sicher gleich lang.

Gruss
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wie wärs denn damit:

Code: Alles auswählen

def compare(s1, s2):
    return sorted(s1) == sorted(s2)
Scheint nach einem kurzen Test ganz ok zu sein:

Code: Alles auswählen

In [16]: compare('abcdefg', 'abgfcde')
Out[16]: True
In [17]: compare('abcdefg', 'abgffde')
Out[17]: False
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Danke diese Funktion (sorted) kannte ich noch nicht.
Das wird wohl funktionieren.

Gruss
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Wobei die dict-methode zumindest bei langen Wörten die schnellere sein müsste, da sie in O(n) (n=Länge des längeren Wortes) fertig wird (2x max. n Buchstaben in dict einfügen + 1x max. nEinträge vergleichen).

Der beste Sortieralgorithmus kann iirc, nicht schneller als O(n log n) sein, es sei denn, das Feld ist bereits sortiert oder ähnliche Späße.

Aber solange die Wörter klein sind dürfte es nicht so sehr ins Gewicht fallen, und die sorted()-Variante ist auch etwas lesbarer.
Antworten