2016-05-04 2 views
4

У меня есть этот код, используя collections Counter, чтобы найти количество общих букв в двух строках.Количество общих букв в двух строках

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

Вы можете уточнить, должна ли функция возвращать абсолютное число общих символов (как описано в ответе Ашанула Хэка) или общее количество общих символов (включая дубликаты символов, найденных в каждой строке)? – 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) 

Там не так много стирают здесь.

Смежные вопросы