[Algorithm] LeetCode - Longest Palindromic Substring

2025. 5. 6. 12:39· → Problems
목차
  1. 📠 문제
  2. 💡 풀이

📠 문제

  • Longest Palendromic Substring
  • 난이도: Medium
  • 문자열 s가 주어질 때, s에서 가장 긴 팰린드롬 부분 문자열을 찾는 문제이다.
  • 팰린드롬이란, 앞에서 읽든 뒤에서 읽든 같은 문자열을 말한다.
Input: s = "babad"
Output: "bab"
Explanation: "aba" is also a valid answer.

💡 풀이

결국 팰린드롬은 중심을 기준으로 대칭이 되어야 한다. 팰린드롬의 종류는 두가지인데 aa처럼 짝수로 된 팰린드롬이 있을 수 있고, aba처럼 홀수로 된 팰린드롬이 있을 수 있다.

 

따라서 중심으로부터 펼쳐(?)나가는 식으로 코드를 작성하면 O(n^2)의 시간복잡도로 구할 수 있다.

func longestPalindrome(_ s: String) -> String {
    guard !s.isEmpty else { return "" }
    
    let chars = Array(s)
    var start = 0, end = 0

    for i in chars.indices {
        let oddLength = palindromeLength(from: i, to: i, in: chars)
        let evenLength = palindromeLength(from: i, to: i + 1, in: chars)
        let maxLength = max(oddLength, evenLength)

        if maxLength > end - start {
            start = i - (maxLength - 1) / 2
            end = i + maxLength / 2
        }
    }

    return String(chars[start...end])
}

private func palindromeLength(from left: Int, to right: Int, in chars: [Character]) -> Int {
    var l = left, r = right
    
    while l >= 0 && r < chars.count && chars[l] == chars[r] {
        l -= 1
        r += 1
    }
    
    return r - l - 1
}

'→ Problems' 카테고리의 다른 글

[Algorithm] LeetCode - Container With Most Water  (0) 2025.05.08
[Algorithm] LeetCode - Clone Graph  (0) 2025.05.07
[Algorithm] LeetCode - Longest Consecutive Sequence  (0) 2025.05.06
[Algorithm] 프로그래머스 - 뒤에 있는 큰 수  (0) 2025.04.06
[Algorithm] 백준 - 16639번 괄호 추가하기3  (0) 2025.03.28
  1. 📠 문제
  2. 💡 풀이
'→ Problems' 카테고리의 다른 글
  • [Algorithm] LeetCode - Container With Most Water
  • [Algorithm] LeetCode - Clone Graph
  • [Algorithm] LeetCode - Longest Consecutive Sequence
  • [Algorithm] 프로그래머스 - 뒤에 있는 큰 수
Swift librarian
Swift librarian
Swift librarian
Swift Library
Swift librarian
전체
오늘
어제
  • 분류 전체보기 (231)
    • 📺 Programming (5)
    • → Architecture (2)
    • → Design Pattern (0)
    • → Computer Science (15)
    • ⚙️ Algorithm (0)
    • → 알고리즘 관련 (22)
    • → Problems (104)
    • 🚀 Project (0)
    • → 알쏭달쏭 (0)
    • → Shook (2)
    • → Solver (8)
    • → Taster (7)
    • → Outline (4)
    • → Pointer (2)
    • → Guesser (3)
    • 🦜 Swift (2)
    • → Swift Archive (12)
    • → Swift Study (12)
    • → Xcode (6)
    • 🧰 Framework (0)
    • → Foundation (1)
    • → UIKit (2)
    • → SwiftUI (3)
    • → CoreData (2)
    • → MapKit (1)
    • → CoreHaptic (1)
    • → User Notification (1)
    • → StoreKit (2)
    • 🏛️ Library (0)
    • → TCA (0)
    • 🐈‍⬛ Git (8)
    • → Git의 원리 (2)
    • → Git 심화 (1)
    • 📦 Other (1)
    • 👦🏻 Log (0)

최근 글

hELLO · Designed By 정상우.v4.2.2
Swift librarian
[Algorithm] LeetCode - Longest Palindromic Substring
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.