LongestPalindromicSubstring

Published at 2021-11-05

class Solution:
    def longestPalindrome(self, s: str) -> str:
        length = len(s)
        sIdx = 0
        eIdx = 0

        def isPal(start, end):
            if start > 0 and end < length - 1:  # start랑 end가 한칸씩 이동할 곳이 있는 경우만 실행
                if s[start - 1] == s[end + 1]:
                    start -= 1
                    end += 1
                    return isPal(start, end)
            return start, end

        for i in range(len(s) - 1):
            odd = isPal(i, i)  # 자기 자신과 비교
            even = isPal(i + 1, i)  # 자기랑 자기뒤랑 비교
            oddS, oddE = odd[0], odd[1]
            evenS, evenE = even[0], even[1]

            if oddE - oddS > eIdx - sIdx:
                sIdx, eIdx = oddS, oddE
            if evenE - evenS > eIdx - sIdx:
                sIdx, eIdx = evenS, evenE

        return s[sIdx:eIdx + 1]