2016-05-04 7 views
4

Ich habe diesen Code mit collections Counter, um die Anzahl der gemeinsamen Buchstaben in zwei Strings zu finden.Anzahl der gemeinsamen Buchstaben in zwei Strings

from collections import Counter 

a = "abcc" 
b = "bcaa" 

answer = 0 

ac = Counter(a) 
bc = Counter(b) 

for key in ac: 
    answer += min(ac[key], bc[key]) 

print answer 

Die Lösung versucht, die Anzahl der gemeinsamen Buchstaben in beiden Strings (gleiche Buchstaben noch gezählt) Meine Frage ist, wie ich diese Logik entwickelt zu finden, aber ich fürchte, es kann ein Rad neu erfunden werden. Gibt es irgendwelche Methoden oder eine einfachere Methode?

Hinweis: Meine Frage ist anders als die Fragen, die versucht, die gemeinsamen Buchstaben zwischen Strings zu finden, ich brauche nur die Zählung, damit ich etwas Grundlegendes erwarte.

+1

können Sie klären, ob die Funktion die absolute Anzahl der gemeinsamen Zeichen (wie in Ahsanul Haques Antwort beschrieben) oder die Gesamtzahl der gemeinsamen Zeichen (einschließlich der Duplikate der Zeichen in jeder Zeichenfolge) zurückgeben soll? – lesingerouge

+0

Ich habe es in einem Kommentar in seiner Antwort hinzugefügt. –

+0

@ MaxPython Bitte fügen Sie keine wichtigen Informationen in Kommentaren (nur), vor allem nicht in den Kommentaren unter Antworten. Antworten und Kommentare können gelegentlich aus verschiedenen Gründen gelöscht werden, und dann sind Ihre Informationen verloren. Außerdem müssten die Leute alle Antworten und Kommentare lesen, bevor sie ihr Problem richtig verstehen, was schlecht ist. Bitte bearbeiten Sie Ihre Frage immer, um neue Informationen hinzuzufügen, und benachrichtigen Sie die Personen, die daran interessiert sind, mit Kommentaren. –

Antwort

-1

Um Vorkommen eines Buchstabens in den Strings zu zählen, könnten Sie ein Wörterbuch verwenden;

a = "abcc" 
counter = {} 


for key in a: 
    if key in counter: 
     counter[key]+=1 
    else: 
     counter[key]=1 

Zähler

{'a': 1, 'b': 1, 'c': 2} 
+1

das ist was 'collections.Counter' ist –

+0

Danke, es scheint, ich habe die Frage falsch interpretiert. – Daniel

1

Nein, soweit ich weiß, haben Sie das Rad nicht neu erfinden. Ihre Lösung ist schon sehr kurz. Sie könnten den Code ein wenig mit der sum Funktion verkürzen und sie dann in eine spezielle Funktion setzen, um die Einfachheit zu betonen:

def num_common_letters(a, b): 
    ac = Counter(a) 
    bc = Counter(b) 
    return sum(min(ac[key], bc[key]) for key in ac) 

Es gibt nicht viel abstreifen.