I am correctly printing every palindromic substring of my input string. Then I return the final palindromic substring which is ["?"]. Makes perfect sense.
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?"))
I try to get only the longest palindrome by changing the if statement like this.
if palindrome == palindrome[::-1] and len(palindrome) > len(longest):
This is not working as expected. I'm only printing the first palindrome ["W"] then returning the entire string in a list ["W", "h", ...]
When you do longest = palindrome
, you're pointing the reference of the longest
list at palindrome
, and therefore palindrome.append(s[j])
is also appending to longest
You need to copy the list.
longest = palindrome[:]
For example,
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?")))
Your function should return ' racecar '
with your "fix" then.
Or you can simply use strings instead of lists.