2017-05-30 6 views
0

このコードの出力は4です。ただし、出力は3になります。私はそれが答えの鍵であると信じているので、設定された交差が存在します。答えが3ではなく4である理由は、s1のs2と一致する2 qと1 rの数に由来します。文字列の共通文字をカウントするPython

s2 = "qsrqq" 
s1 = "qqtrr" 
counts1=0 
counts2=0 
letters= set.intersection(set(s1), set(s2)) 
for letter1 in set(s1): 
    counts1 += s2.count(letter1) 
for letter2 in set(s2): 
    counts2 += s1.count(letter2) 


counts = min(counts1, counts2) 
print (counts) 

ご協力いただきまして誠にありがとうございます。

+1

達成しようとしていることは何ですか? –

+0

3が正しい答えである理由を説明できますか? – Mureinik

+0

s1には、s2と一致する2 qsと1 rがあります。私はちょうどこれを出力する答えをしたい。 –

答えて

3

あなたが共通の文字数のカウントを維持したい場合は、collections.Counterの代わりsetを使用する必要があります。ここで

from collections import Counter 

s2 = 'qsrqq' 
s1 = 'qqtrr' 

common_letters = Counter(s1) & Counter(s2) # => {'q': 2, 'r': 1} 
print(sum(common_letters.values()))   # => 3 
1

私はコード

for letter1 in set(s1): 
    counts1 += s2.count(letter1) 

の元のチャンクを置き換える:それは出力

for letter1 in set(s1): 
    v = s2.count(letter1) 
    print("{0}:{1}".format(letter1, v)) 
    counts1 += v 

、それは出現回数との手紙です:

r:1 
q:3 
t:0 

それが正しいか、文字列s2はqsrqqであり、設定されているセット(s1)にはrq 数が正しいです。 forループ第二を確認した場合も同様に、出力は以下のとおりです。

q:3 
r:1 
s:1 

したがって、最小数は4

0

ことの何を見つけるために、各文字のカウントを行い、最小を取るです文字は両方の文字列に共通です。それを合計して、あなたの答えです。

for letter in letters: 
    counts1 += s1.count(letter) 
    counts2 += s2.count(letter) 
    counts += min(counts1, counts2) 
    counts1 = 0 
    counts2 = 0 
print(counts) 
1

はセットを含まない溶液である:ここでは

s2 = sorted("qsrqq") 
s1 = sorted("qqtrr") 

count = 0 
while len(s1)>0 and len(s2)>0: 
    if s1[0] == s2[0]: 
     count += 1 
     s1 = s1[1:] 
     s2 = s2[1:] 
    elif s1[0] < s2[0]: 
     s1 = s1[1:] 
    else: 
     s2 = s2[1:] 

print(count) 
+0

あなたの答えは正しいです。しかし、私は一番上の答えの単純さが好きです。 –

1

には、モジュールを使用していない、それを行うための別の方法です。

sum(1 for i in zip(sorted(list(s1)), sorted(list(s2))) if len(set(i)) < 2) 

3 
1
#!/usr/bin/python 
s2 = "qsrqq" 
s1 = "qqtrr" 
counts1=0 
counts2=0 
letters= set.intersection(set(s1), set(s2)) 
print ("letters: "+str(letters) + " intersection count: "+str(len(letters))) 
for letter1 in set(s1): 
    print ("letter1 " + str(letter1)) 
    counts1 += 1 
for letter2 in set(s2): 
    print ("letter2 " + str(letter2)) 
    counts2 += 1 

print ("counts1 " + str(counts1) + " counts2 " + str(counts2)) 
counts = min(counts1, counts2) 
print (counts) 

これは、その結果、

[~]$ python /tmp/test.py 
letters: set(
['q', 'r']) intersection count: 2 
letter1 q 
letter1 r 
letter1 t 
letter2 q 
letter2 s 
letter2 r 
counts1 3 counts2 3 
3 

解析では、2が正しい答えです(qとrは両方に共通する唯一の文字です)。3はどちらか小さい方の値を設定します。

+0

gosh私はprintステートメントが大好き –

関連する問題