<--- 리트코드 5. Longest Palindrome Substring --->
# 문제: 가장 긴 팰린드롬 부분 문자열을 출력하라.
입력
"babad" |
출력
"bab" |
입력
"cbbd" |
출력
"bb" |
# 풀이
1. 중앙을 중심으로 확장하는 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
def longest_palindrome(s):
# 팰린드롬 판별 및 투 포인터 확장
def expand(left, right):
while left >= 0 and right <= len(s) and s[left] == s[right-1]:
left -= 1
right += 1
return s[left + 1:right -1]
# 해당 사항이 없을 때 빠르게 리턴
if len(s) < 2 or s == s[::-1]:
return s
result = ''
# 짝수, 홀수 슬라이딩 윈도우 우측으로 이동
for i in range(len(s)-1):
result = max(result,
expand(i, i+1),
expand(i, i+2),
key = len)
return result
s = input()
print(longest_palindrome(s))
|
cs |
'Python' 카테고리의 다른 글
파이썬 알고리즘 인터뷰 - 08. 빗물 트래핑 (0) | 2022.01.12 |
---|---|
파이썬 알고리즘 인터뷰 - 07. 두 수의 합 (0) | 2022.01.11 |
파이썬 알고리즘 인터뷰 - 05. 그룹 에너그램 (0) | 2022.01.10 |
파이썬 알고리즘 인터뷰 - 04. 가장 흔한 단어 (0) | 2022.01.10 |
파이썬 알고리즘 인터뷰 - 03. 로그파일 재정렬 (0) | 2022.01.05 |