[Leetcode] 5. Longest Palindromic Substring
[Leetcode] 5. Longest Palindromic Substring

[Leetcode] 5. Longest Palindromic Substring

카테고리
📚 Algorithm
작성자
박용성박용성
작성일
2024년 06월 03일
태그
Python
Leetcode
Slug
Leetcode-5

🖥️ 시작하며

주어진 문자열에서 가장 긴 팰린드롬 부분 문자열을 찾아야 합니다. 앞에서 읽어도, 뒤에서 읽어도 같은 문자열을 뜻합니다.
 
이 문제를 해결하기 위해 중앙을 기준으로 팰린드롬을 확장해 나가는 방법을 사용했습니다.
 
  1. 팰린드롬 확장 함수 정의:
      • calc(left: int, right: int) -> str : 주어진 인덱스 leftright 를 중심으로 팰린드롬을 확장해 나갑니다. leftright 는 각각 줄어들고 늘어납니다.
  1. 팰린드롬 탐색:
      • 문자열 s 의 각 문자를 중심으로 팰린드롬을 확장합니다.
      • 각 문자 i 에 대해 홀수 길이 팰린드롬과 짝수 길이 팰린드롬을 체크합니다. 둘의 구조가 다르기 때문입니다.
      • calc(i, i) : 홀수 길이 팰린드롬 체크합니다.
      • calc(i, i + 1) : 짝수 길이 팰린드롬 체크합니다.
 

⚙️ Python

from typing import List class Solution: def longestPalindrome(self, s: str) -> str: # 중앙에서부터 앞뒤로 팰린드롬 체크 def calc(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) == 0: return "" longest = "" for i in range(len(s)): # 홀수 팰린드롬 체크 odd = calc(i, i) if len(odd) > len(longest): longest = odd # 짝수 팰린드롬 체크 even = calc(i, i + 1) if len(even) > len(longest): longest = even return longest # 예제 테스트 sol = Solution() print(sol.longestPalindrome("babad")) print(sol.longestPalindrome("cbbd"))
 

📌 소감

오랜만에 문자열을 다뤄본 문제였습니다.

댓글

guest