Python 递归双字母

Python Recursion Double letters

那么任务是什么,你应该编写一个递归函数来计算字符串中 "double" 个字母的数量,例如字符串 "hmmm" 将 return 1 和字符串 "hmmmm" 将 return 2 并且字符串 "abb" 将 return 1. 我的代码在这里:

def num_double_letters(astr):
    if astr == "" or len(astr) == 1:
        return 0
    elif len(astr) == 2:
        if astr[0] == astr[1]:
            return 1 + num_double_letters(astr[1:])
        else: 
            return 0 + num_double_letters(astr[1:])
    elif astr[0] != astr[1]:
        return 0 + num_double_letters(astr[1:])
    elif astr[0] == astr[1] != astr[2]:
        return 1 + num_double_letters(astr[1:])
    elif astr[0] == astr[1] == astr[2]:
        return 0 + num_double_letters(astr[1:])

我的问题是,一个包含 4 个相同字母的字符串 = 1,而它应该 = 2。还有没有更简洁的方法来做到这一点?

我认为你自己弄得有点复杂了...一旦你的字符串长度为 2,就没有必要深入递归,并且你想前进 2,而不是 1,当你找一个双数来计算我认为你做的方式。试试这个:

def num_double_letters(astr):
    if astr == "" or len(astr) == 1:
        return 0
    elif len(astr) == 2:
        if astr[0] == astr[1]:
            return 1
        else: 
            return 0
    elif astr[0] != astr[1]:
        return 0 + num_double_letters(astr[1:])
    elif astr[0] == astr[1]:
        return 1 + num_double_letters(astr[2:])

print(num_double_letters('hmm'))
print(num_double_letters('hmmm'))
print(num_double_letters('hmmmm'))

输出:

1
1
2

您可能会考虑以下更 Pythonic 和简洁:

def num_double_letters(astr):
    if len(astr) < 2:
        return 0
    if astr[0] == astr[1]:
        return 1 + num_double_letters(astr[2:])
    return num_double_letters(astr[1:])