2017-04-16 101 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 '

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

相關問題