更好的方法来检查一个句子是否是Python中的回文

时间:2016-04-18 21:05:54

标签: python recursion

我是Python的新手(或编程),我正在尝试学习递归。

我编写了一个递归python函数来检查一个句子(不是一个单词)是否是回文。

def checkPalindrome(sentence):
    sentence = re.sub('[^\w]', '', sentence.lower())
    if len(sentence) == 1: 
        return True
    elif len(sentence) == 2:
        return sentence[0]  == sentence[1]
    else:
        return checkPalindrome(sentence[1:-1])

此功能有效并提供正确的结果。例如:

checkPalindrome('Go hang a salami; I’m a lasagna hog')
True

但是,由于我在函数开头删除空格,标点符号和更改句子的大小写,因此将在每次递归调用时计算此步骤。

有没有更好的方法来重写函数以避免这种情况?

1 个答案:

答案 0 :(得分:2)

我认为你刚回答了自己的问题:编写一个函数来减少输入小写字母并调用第二个函数。第二个函数进行回文检查和递归。

但是,请注意,您的功能不起作用:它唯一一次检查结束字符是否在len(句子)== 2的基本情况下。您需要在递归调用之前检查,也是:

else:
    return sentence[0] == sentence[-1] and
           checkPalindrome(sentence[1:-1])

鉴于此,您还可以结合两种基本情况:

if len(sentence) <= 1:
    return True

根据@Joran的建议编辑。我最近一直生活着太多的编译器优化; Python语言定义不保证我的原始内容;在一般情况下,此更新将更有效。