首页 > 解决方案 > 如何在python中找到最长的回文?

问题描述

众所周知,回文是一个等于它的反义词的词。下面是一些回文的例子:malayalam, gag, appa, amma.

我们认为任何由英文字母组成的序列都是一个单词。所以 axxb,abbba 和 bbbccddx 是我们的目的。并且 aaabbaaa、abbba 和 bbb 是回文的例子。

单词的子词是指该词的连续子序列。例如,单词 abbba 的子词是 a、b、ab、bb、ba、abb、bbb、bba、abbb、bbba 和 abbba。

在此任务中,您将给出一个单词,并且您必须找到该单词的最长子词,该子词也是回文。

例如,如果给定的单词是 abbba,那么答案就是 abbba。如果给定的单词是 abcbcabbacba,那么答案就是 bcabbacb。

解决方案提示 w 的任何回文子词在 w 反转时也是子词。

输入格式 输入的第一行包含一个整数 N,表示单词的长度。下面一行包含一个长度为 N 的单词,由字母 a、b、…、z 组成。

输出格式 输出的第一行必须包含一个整数,表示给定单词的最长子单词的长度,该子单词是回文。第二行必须包含一个子词,该子词是回文,并且具有最大长度。如果有超过一个最大长度的子词回文,则打印按字典顺序最小的一个(即按字典顺序最小的)。

测试数据:您可以假设 1 ≤ N ≤ 5000。您可以进一步假设在 30% 的输入中 1 ≤ N ≤ 300。

示例:我们使用上面的示例来说明输入和输出格式:

Sample Input 1:
5
abbba
Sample Output 1:
5
abbba
Sample Input 2:
12
abcbcabbacba
Sample Output 2:
8
bcabbacb

我尝试了一个代码,但它不工作!

请帮我一些其他代码!

这是我的代码,但它不起作用!

n = int(input())
ar = []
bestvals = [] 
best_stored = [] 
for x in range(n): 
    ar.append(int(input())) 
    best_stored.append(0) 
    best_stored[0] = 1 
    for i in range(n): 
        maxval = 1 
        for j in range(i): 
            if ar[i] % ar[j] == 0:
                maxval = max(maxval,(best_stored[j])+1) 
        best_stored[i] = maxval
print(max(best_stored))

标签: pythonpython-3.x

解决方案


def longestPalindrome():
    n = int(input())
    s = input()
    temp = ""
    for i in range(len(s)):
        for j in range(len(s)-1,i-1,-1):
            if s[i] == s[j]:
                m = s[i:j+1]
                if m == m[::-1]:
                    if len(temp) <= len(m):
                        temp = m
    print(len(temp))
    print(temp)

longestPalindrome()   

推荐阅读