1

代码

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 函数,该函数将接收两个字符串并返回两个字符串之间共享的字符出现次数。

IE jottoScore('maat','caat') 应该返回 3,因为有两个 As 被共享,一个 T 被共享。

我觉得这是一个足够简单的独立练习题,但我不知道如何迭代字符串并比较每个字符(我已经按字母顺序对字符串进行了排序)。

4

4 回答 4

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
于 2013-08-06T07:09:11.097 回答
1

如果它们被排序并且顺序很重要:

>>> a = "maat"
>>> b = "caat"
>>> sum(1 for c1,c2 in zip(a,b) if c1==c2)
3
于 2013-08-06T07:08:51.147 回答
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

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

于 2013-08-06T07:13:30.097 回答
0

@sberry answer的简化版本。

from collections import Counter

def jotto_score(str1, str2):
    return sum((Counter(str1) & Counter(str2)).values())
于 2016-02-24T01:34:14.353 回答