众所周知,回文词是一个与其相反的词。以下是一些回文示例: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))
答案 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))