class Solution:
def longestPalindrome(self, s: str) -> str:
"""
main idea: from middle to two ends , two cases: 1. odd 2. even
time O(N^2) space O(1)
"""
res = '' # Memory to remember a palindrome
for i in range(len(s)):
# even
temp = self.helper(s,i,i+1)
# get the longer palindrome after each expansion
if len(res)<len(temp):
res = temp
# odd
temp = self.helper(s,i,i)
if len(res) < len(temp):
res = temp
return res
def helper(self,s,l,r):
# check l,r are within valid range, expand two ends
while l >= 0 and r < len(s) and s[l]==s[r]:
l -= 1
r += 1
# return expended string(be careful with out of boundry)
return s[l+1:r]