seungriyou / algorithm-study

알고리즘 & SQL 문제 풀이 기록
https://leetcode.com/u/summer_y
0 stars 0 forks source link

[LC] 5. Longest Palindromic Substring #57

Open seungriyou opened 7 months ago

seungriyou commented 7 months ago

https://leetcode.com/problems/longest-palindromic-substring/

Approach

Idea 1: 2D DP


Idea 2: Two Pointer

palindrome에는 두 가지 종류가 있다.

따라서, s의 모든 문자를 순회하며, 좌우로 확장해가면서 홀수 길이의 palindrome과 짝수 길이의 palindrome을 찾아 longest palindrome을 트래킹 하면 된다.

이때, 좌우로 확장하는 함수 expand(left, right)는 다음과 같이 작성한다.

def expand(left, right):
    """left, right를 양끝으로 늘려가며 palindrome을 찾는 함수"""
    while left >= 0 and right <= n and s[left] == s[right - 1]:
        left -= 1
        right += 1
    return s[left + 1:right - 1]

이를 다음과 같이 사용한다. max()를 사용할 때 문자열의 길이를 기준으로 해야하므로, key=len으로 설정한다.

result = ""
for i in range(n):
    result = max(
        result,
        expand(i, i + 1),   # 홀수 길이 palindrome 찾기
        expand(i, i + 2),   # 짝수 길이 palindrome 찾기
        key=len
    )

이 방법이 DP 보다 훨씬 효율성이 좋았다.


Complexity