Seite 1 von 1

2 Wörter vergleich -> gleiche Buchstaben

Verfasst: Sonntag 19. März 2006, 22:05
von rayo
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

Verfasst: Sonntag 19. März 2006, 22:13
von Leonidas
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

Verfasst: Sonntag 19. März 2006, 22:19
von rayo
Hi

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

Gruss

Verfasst: Montag 20. März 2006, 09:03
von henning
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.