본문 바로가기
Algorithm/LEET CODE ( 파이썬 알고리즘 인터뷰)

[LEET CODE] 5. Longest Palindromic Substring

by newnu 2021. 3. 16.
반응형

#Problem

Given a string s, return the longest palindromic substring in s.

 

Example 1:
Input : s = "babad"
Output :  "bab"
Note : "aba" is also a valid answer.

Constraints:

  • 1 <= s.length <= 1000
  • s consist of only digits and English letters (lower-case and/or upper-case)

# My Answer

Time Limit Exceeded

class Solution:
    def longestPalindrome(self, s: str) -> str:
        pmax=s
        len_max = len(pmax)
        if s==s[::-1]:
            return s
        else:
            while(len_max!=0):
                len_max-=1  # substring의 길이를 줄여가면서 팰린드롬인지 확인하기
                for i in range(len(s)-len_max+1):
                    if s[i:i+len_max]==''.join(list(reversed(s[i:i+len_max]))):
                        pmax = s[i:i+len_max]
                        return pmax

# Solution

class Solution:
    def longestPalindrome(self, s: str) -> str:
        # 팰린드롬 판별 및 투 포인터 확장
        # expand 함수는 중심에서 양쪽으로 계속 뻗어나간다.
        def expand(left: int, right: int) -> str:
            while left >= 0 and right < len(s) and s[left] == s[right]:
                left -= 1
                right += 1
            return s[left + 1:right]

        # 해당 사항이 없을때 빠르게 리턴
        if len(s) < 2 or s == s[::-1]:
            return s

        result = ''
        # 슬라이딩 윈도우 우측으로 이동
        for i in range(len(s) - 1):
            result = max(result,
                         expand(i, i + 1), # expand(i,i+1) 길이가 짝수인 팰린드롬 찾기
                         expand(i, i + 2), # expannd(i,i+2) 길이가 홀수인 팰린드롬 찾기
                         key=len)
        return result

 

 

 

반응형