字符串中最长的Palindrome没有循环Python 3

时间:2017-02-14 03:55:14

标签: python string recursion

我试图创建一个函数,在不使用for循环的情况下找到字符串中最长的回文。如果有相同长度的回文,则产生首先按字母顺序排列的回文。例子:"" => ""," bcd" => " b"," acaba" => ABA

我在溢出时发现这个类似,除了它使用for循环并找到第一个回文。

def palindromes(text):
    results = []

for i in range(len(text)):
    for j in range(0, i):
        chunk = text[j:i + 1]

        if chunk == chunk[::-1]:
            results.append(chunk)

return text.index(max(results, key=len)), results

我正在考虑使用的方法是检查每个子串是否等于它的反向子串[:: - 1]。但我不知道如何获得每个可能的子串。我知道通过递归我可以删除字符串的最后一个或第一个位置,但是不会检查中间的子串。

1 个答案:

答案 0 :(得分:0)

使用递归,您可以简化为自身匹配,或者在没有第一个字符的情况下检查没有最后一个字符或字符串结尾的字符串的递归开头:

def palindromes(text):
    if text == text[::-1]:
        return len(text)
    return max(palindromes(text[:-1]), palindromes(text[1:]))

复杂性非常糟糕 - 尽管如此。