2016-05-04 12 views
4

このコードでは、collections Counterを使用して、2つの文字列の共通文字の数を検索しています。2つの文字列の共通文字の数

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 

ソリューションは、両方の文字列に共通する文字の数を見つけようとします(同じ手紙はまだ数える)私の質問があり、私はこのロジックを開発したが、私はそれを再発明車輪かもしれ恐れます。導入された方法はありますか、これを行う簡単な方法はありますか?

注:私の質問は、文字列間の共通の文字を見つけることを試みる質問とは異なります。私は何か基本的なものを見つけることを期待するので、カウントが必要です。

+1

(Ahsanul Haqueの答えに記載されているように)関数が共通文字の絶対数を返すべきか、共通文字の総数(各文字列に含まれる文字の重複を含む) – lesingerouge

+0

私は彼の答えのコメントにそれを加えました。 –

+0

@MaxPythone重要な情報をコメントに追加しないでください。さまざまな理由で回答やコメントが削除されることがあり、情報が失われることがあります。また、問題を正しく理解するには、すべての回答とコメントを読む必要がありますが、これは悪いことです。あなたの質問を常に編集して、新しい情報を追加し、コメントを使って興味のある人に知らせてください。 –

答えて

-1

文字列内の文字の出現をカウントするには、辞書を使用できます。

a = "abcc" 
counter = {} 


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

カウンタ

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

これは 'collections.Counter'が –

+0

であることです。ありがとう、私は質問を誤解しているようです。 – Daniel

1

いいえ、私の知る限り、あなたは車輪の再発明をしませんでした。あなたのソリューションは既に非常に簡潔です。あなたはsum機能を使用してコードを少し短くして、シンプルさを強調するために、専用の機能にそれを置くことができます:ここに剥ぎ取るために多くはありません

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

関連する問題