2016-10-20 2 views
-1

Es gibt ein Wörterbuch d von Buchstaben und Frequenzen, die eine Hand in einem Spiel ähnlich wie Scrabble darstellt. Wenn die Buchstaben in word innerhalb d enthalten sind, dann werden die Frequenzen geändert oder die Buchstaben entfernt wird (wenn der Wert == 0) und die Funktion updateTrue zurück, sonst d ist unverändert und die Funktion gibt `False ':Wie könnte ich dieses Wort passender algo effizienter python

d = {'a': 1, 'p': 2, 'c': 1, } 

dCopy = d.copy() 

matching_lets = 0 


def update(): 

    for let in word: 
     if not let in dCopy: 
      return False 
     else: 
      if dCopy[let] == 1: 
       del dCopy[let] 
      else: 
       dCopy[let] -= 1 
    d = dCopy 
    return True 

word = 'pap' 
print update() 

Dies ist Teil des Problems set 5 aus dem Kurs EDX mITX 6.00.1, Einführung in der Informatik und Programmierung mit Python

+0

Ich denke, anstelle von 'Return false' in der ersten for-Schleife muss zu' continue' geändert werden und verwenden Sie eine Flagge zu überprüfen ist 'd' manipuliert oder nicht, um' false' zurückgeben, wenn nicht –

+0

'd = dCopy' wird nichts tun, wenn Sie nicht in 'update()' deklarieren, dass 'd' global ist. Sie wären besser dran Renditen und Argumente zu verwenden und Ihre globalen Variablen loszuwerden. – khelwood

Antwort

1

Es gibt keine schnellere Lösung in Python, da Ihre Frage. dict() ist das gleiche wie ein hashmap und so Ihre update Funktion hat O(|word_length| + |dict_length|) durchschnittlichen Fall Komplexität, wobei word_length ist die Anzahl der Zeichen in dem angegebenen Wort und dict_length ist die Anzahl der Schlüssel-Wert-Paare in Ihrem dict.

Hinweis: @khelwood ist korrekt über d = dCopy. Finde heraus, wie du dieses Problem selbst lösen kannst.

Verwandte Themen