比较字符串中字符的出现次数

时间:2013-08-06 07:02:35

标签: python comparison

code

def jottoScore(s1,s2):

    n = len(s1)

    score = 0

    sorteds1 = ''.join(sorted(s1))

    sorteds2 = ''.join(sorted(s2))

    if sorteds1 == sorteds2:
            return n

    if(sorteds1[0] == sorteds2[0]):
        score = 1 
    if(sorteds2[1] == sorteds2[1]):
        score = 2
    if(sorteds2[2] == sorteds2[2]):
        score = 3
    if(sorteds2[3] == sorteds2[3]):
        score = 4
    if(sorteds2[4] == sorteds2[4]):
        score = 5

    return score


print jottoScore('cat', 'mattress')

我正在尝试编写一个jottoScore函数,该函数将接收两个字符串并返回两个字符串之间共享的字符出现次数。

I.E jottoScore('maat','caat')应返回3,因为有两个As共享,一个T共享。

我觉得这是一个简单的独立练习问题,但我无法弄清楚如何迭代字符串并比较每个字符(我已经按字母顺序对字符串进行了排序)。

有人可以帮我找到解决方案吗?

4 个答案:

答案 0 :(得分:3)

如果您使用的是Python2.7 +,那么这就是我要采取的方法:

from collections import Counter

def jotto_score(str1, str2):
    count1 = Counter(str1)
    count2 = Counter(str2)
    return sum(min(v, count2.get(k, 0)) for k, v in count1.items())

print jotto_score("caat", "maat")
print jotto_score("bigzeewig", "ringzbuz")

<强>输出

3
4

答案 1 :(得分:1)

如果他们被排序并且订单很重要:

>>> a = "maat"
>>> b = "caat"
>>> sum(1 for c1,c2 in zip(a,b) if c1==c2)
3

答案 2 :(得分:0)

def chars_occur(string_a, string_b):
    list_a, list_b = list(string_a), list(string_b) #makes a list of all the chars
    count = 0
    for c in list_a:
        if c in list_b:
            count += 1
            list_b.remove(c)
    return count

编辑:此解决方案不会考虑字符串是否与字符串中的索引相同,或字符串的长度是否相同。

答案 3 :(得分:0)

简化版@sberry answer

from collections import Counter

def jotto_score(str1, str2):
    return sum((Counter(str1) & Counter(str2)).values())