2017-04-16 44 views
0

我正确打印我的输入字符串的每一个回文字符串。然后我返回最后的回文子串,它是[“?”]。非常有意义。保存时间最长的名单在Python

def longestPalindrome(s): 
    longest = [] 
    palindrome = [] 
    for i in range(len(s)): 
     for j in range(i, len(s)): 
      palindrome.append(s[j]) 
      if palindrome == palindrome[::-1]: 
       print(palindrome) 
       longest = palindrome 
     palindrome = [] 
    return longest 

print(longestPalindrome("What kind of racecar do you drive?")) 

我试图通过改变if语句来得到最长的回文。

if palindrome == palindrome[::-1] and len(palindrome) > len(longest): 

这不按预期工作。我只打印第一个回文[[W]],然后将整个字符串返回到列表中[“W”,“h”,...]

+0

如果你想有一个字符串,而不是一个名单,不过,你需要回到一个...'回报“”。加入(最长)' –

+0

我知道如何返回一个字符串后,这不是一个问题。 –

+0

我的意思是我包含了正确的输入。 –

回答

0

当您做longest = palindrome时,您指向在longest列表中palindrome,因此palindrome.append(s[j])追加到longest

你需要复制该列表。

longest = palindrome[:] 

例如,

def longestPalindrome(s): 
    longest = [] 
    palindrome = [] 
    for i in range(len(s)): 
     for j in range(i, len(s)): 
      palindrome.append(s[j]) 
      if palindrome == palindrome[::-1] and len(palindrome) > len(longest): 
       # print(palindrome, i, j) 
       longest = palindrome[:] 
     palindrome = [] 
    return ''.join(longest) 

print(repr(longestPalindrome("What kind of racecar do you drive?"))) 

你的功能应该与你的 “修复”,再返回' racecar '

或者你可以简单地使用字符串,而不是名单。