如何在python中找到最长的回文?

时间:2019-03-26 09:57:35

标签: python python-3.x

众所周知,回文词是一个与其相反的词。以下是一些回文示例:malayalamgagappaamma

我们认为由英语字母组成的任何序列都是一个单词。所以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))

2 个答案:

答案 0 :(得分:-1)

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()   

答案 1 :(得分:-2)

这应该工作正常:

word = input('enter your word: ')
subwords = []
for i in range(len(word)):
    for j in range(len(word)+1):
        subwords.append(word[i:j])

palindromes = []
for subword in subwords:
    if subword == subword[::-1]:
        palindromes.append(subword)


print(len(max(palindromes, key=len)))
print(max(palindromes, key=len))