honey_pot

[python] 가장 긴 팰린드롬 본문

문제 풀이

[python] 가장 긴 팰린드롬

_tera_ 2022. 9. 23. 01:57

https://school.programmers.co.kr/learn/courses/30/lessons/12904


리트코드 5번 Longest Palindrome Substring 과 똑같은 문제다

다른 점은 문자열을 리턴하는게 아니라 문자열 길이를 리턴한다는 점 빼고는 다 같다

파이썬 알고리즘 인터뷰 공부할 때 풀었던 거라 투포인터 슬라이딩도 복습했다

 

홀수개의 문자열을 체크하는 포인터와 i, i+2

짝수개의 문자열을 체크하는 포인터 i, i+1  를 계속 움직여서 처음 팰린드롬을 발견한 순간부터 양쪽의 길이를 1씩 늘려가면서 팰린드롬인지 확인하는 형태이다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def solution(s):
    if len(s) < 2 or s == s[::-1]:
        return len(s)
    def expand(left, right):
        while left <= right and right < len(s) and s[left] == s[right]:
            left -= 1
            right += 1
        return s[left+1:right]
    answer = ''
    for i in range(len(s)-1):
        answer = max(answer,
                    expand(i,i+1),
                    expand(i,i+2),
                    key=len)
    return len(answer)
cs

 

 

더 간단하게 for문을 돌면서 [i:i+1..+2...+3...] 문자열이 팰린드롬인지 확인하고 answer를 최대값으로 갱신하는 코드로 짤 수 있지만 효율성에서 투포인터보다 못하다

1
2
3
4
5
6
7
8
9
def solution(s):
    if len(s) < 2 or s == s[::-1]:
        return len(s)
    answer = 1
    for i in range(len(s)):
        for j in range(i+1,len(s)+1):
            if s[i:j] and s[i:j] == s[i:j][::-1]:
                answer = max(answer, len(s[i:j]))
    return answer
cs

'문제 풀이' 카테고리의 다른 글

[Python] 불량 사용자  (0) 2022.09.23
[Python] 단속카메라  (0) 2022.09.23
[python] 등굣길  (0) 2022.09.23
[python] 야근 지수  (0) 2022.09.22
[python] 최고의 집합  (0) 2022.09.22
Comments