2017-04-16 6 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"、 "h"、...]の文字列全体を返します。

+0

リストの代わりに文字列が必要な場合は、返す必要があります。返す '.join(最長) ' –

+0

後で文字列を返す方法はわかりませんが問題ありません。 –

+0

私は正確な入力を右に渡したことを意味します。 –

答えて

0

longest = palindromeを実行すると、 longestpalindromeのリスト、およびそのため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 'を返す必要があります。

リストの代わりに文字列を使用することもできます。

関連する問題