繁体   English   中英

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

[英]Longest Palindrome in a String without loops Python 3

我正在尝试创建一个函数,在不使用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]。 但我不知道如何获得每个可能的子串。 我知道递归我可以删除字符串的最后一个或第一个位置,但不会检查中间的子串。

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

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

然而,复杂性非常糟糕 - 指数级。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM