Mahdi Shamlou | LeetCode #5 풀이: Longest Palindromic Substring — 내 Expand-Around-Center 모험

발행: (2026년 1월 31일 오후 08:33 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

여러분 안녕하세요! 마흐디 샴루입니다 — LeetCode 고전 문제 시리즈를 계속 진행합니다 🚀

#4 두 정렬된 배열의 중앙값 이후, 오늘은 문제 #5 — 가장 긴 팰린드롬 부분 문자열에 대해 살펴보겠습니다. 인터뷰에서 자주 등장하는 아주 유명한 문제입니다!

Mahdi Shamlou | مهدی شاملو

문제 설명

문자열 s가 주어지면, s 안에서 가장 긴 팰린드롬 부분 문자열을 반환하세요.
팰린드롬은 앞뒤가 동일하게 읽히는 문자열을 말합니다.

예시

Input: s = "babad"
Output: "bab"
Explanation: "aba"도 유효한 답변이며 (두 문자열 모두 길이 3)

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

Input: s = "a"
Output: "a"

풀이: 중심 확장법 (Expand‑Around‑Center)

처음에 모든 가능한 부분 문자열을 검사하는 방법을 생각했는데, 이는 (O(n³) 악몽 😅)이라 너무 비효율적이었습니다. 그때 깨달은 것이 바로: 팰린드롬은 중심에서 양쪽으로 확장될 수 있다는 점입니다!

아이디어는 다음과 같습니다.

  • 홀수 길이 팰린드롬의 경우 각 문자 자체를,
  • 짝수 길이 팰린드롬의 경우 각 문자 사이의 틈을

가능한 중심으로 간주하고, 양쪽 문자가 일치하는 동안 계속 확장합니다.

class Solution:
    def longestPalindrome(self, s: str) -> str:
        if not s:
            return ""

        start = 0
        end = 0

        def expand_around_center(left: int, right: int):
            while left >= 0 and right  end - start:
                start, end = l1, r1

            if r2 - l2 > end - start:
                start, end = l2, r2

            # Debug prints (optional)
            # print(f"start : {start} and end : {end}")
            # print("#" * 100)

        return s[start:end + 1]

복잡도 분석

  • 시간 복잡도: O(n²) – 각 확장은 최악 O(n)까지 진행될 수 있고, 중심은 약 2n개가 존재합니다.
  • 공간 복잡도: O(1) – 몇 개의 정수 변수만 사용합니다.

참고 자료

Submission success

Back to Blog

관련 글

더 보기 »

LeetCode #347. 상위 K 빈도 요소

복잡도 분석 - 시간 복잡도: O(n log n), 정렬에 의해 지배됨 - 공간 복잡도: HashMap 및 List에 대해 O(n) Solution java class Solution { public int...

문제 10: 중복 제거

문제 설명 우리는 리스트에서 중복을 제거하면서 원래 요소들의 순서를 유지하는 함수를 필요로 합니다. 예시: `remove_duplicates` 1, 2, 2, 3...