[programmers/py] 가장 긴 팰린드롬

승민·2024년 4월 22일

알고리즘

목록 보기
109/171

가장 긴 팰린드롬

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

문제 설명

앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다.
문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.

예를들면, 문자열 s가 "abcdcba"이면 7을 return하고 "abacde"이면 3을 return합니다.

풀이

비교 문자열의 길이가 홀수, 짝수를 구분해야 합니다.
"abba"의 경우 bb를 비교하고 aa를 비교하지만, "aba"는 aa를 비교해 값을 찾아냅니다.

def pan(s, i):
    # 홀수
    answer1 = 1
    d1 = 1
    while (d1<=min(i, len(s)-i-1)):
        if s[i-d1] != s[i+d1]: # 홀수
            break
        else :
            answer1 += 2
        d1 += 1
    
    # 짝수
    answer2 = 0
    d2 = 1
    while (d2 <= min(i+1, len(s)-i-1)):
        if s[i-d2+1] != s[i+d2]: # 짝수
            break
        else :
            answer2 += 2
        d2 += 1
    
    return max(answer1, answer2)
        
def solution(s):
    if len(s) == 1:
        return 1
    
    answer = 1
    
    for i in range(len(s)):
        answer = max(answer, pan(s, i))

    return answer

0개의 댓글