[Leet Code] 5. Longest Palindromic Substring

이번 포스팅에서는 5번 문제를 다룬다.

파이썬이 아직 익숙치 않아서 코드 부분에 대해 피드백할 부분이 있으면 언제든 댓글로 남겨주시면 감사드리겠습니다.

Problem

5. Longest Palindromic Substring

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

1 <= s.length <= 1000

s consist of only digits and English letters (lower-case and/or upper-case),

Example 1:

Input: s = "cbbd"
Output: "bb"

Example 2:

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

Solution :

from typing import *


class Solution:
    def longestPalindrome(self, s: str) -> str:
        dp: List[List[bool]] = [[False] * len(s) for _ in range(len(s))]
        answer: str = s[0]

        for idx in reversed(range(len(s))):
            for jdx in range(idx, len(s)):
                dp[idx][jdx] = s[idx] == s[jdx] and (jdx - idx <= 2 or dp[idx + 1][jdx - 1])
                if dp[idx][jdx] and jdx - idx >= len(answer):
                    answer = s[idx:jdx + 1]

        return answer
  • DP를 이용하여 풀었다.

  • s[i:j]가 팰린드롬이려면, s[i+1:j-1] 역시 팰린드롬이면 된다.

  • 시간복잡도는 O(n^2)인데, 시간이 왜이렇게 많이 나오는지 모르겠다. 파이썬이라 그런가

댓글남기기