Python递归双字母

时间:2015-03-04 19:09:17

标签: python recursion

那么任务是什么,是你应该写一个递归函数来计算字符串中“双”字母的数量,所以例如字符串“hmmm”将返回1并且字符串“hmmmm”将返回2,字符串“abb”将返回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:])

我的问题是,当它应该= 2时,一个字符串有4个相同的字母= 1。还有一个更干净的方法吗?

1 个答案:

答案 0 :(得分:3)

我认为你让自己变得有点复杂......一旦你的字符串长度是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:])