class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        # main idea: start from the middle to extend toward two sides. Two cases need to be processed seperately :1. odd 2. even 
        # time O(N^2) space O(1)
        size = len(s)
        if not s or size == 1:
            return s
        res = ''
        for i in range(size):
            # odd
            temp = self.helper(s,i,i)
            if len(res)< len(temp):
                res = temp
            # even
            temp = self.helper(s,i,i+1)
            if len(res) <len(temp):
                res = temp
        return res 
    def helper(self,s,l,r):
        while l>=0 and r < len(s):
            if s[l]==s[r]:
                r += 1
                l -= 1
            else:
                break
        return s[l+1:r]