거누의 개발노트

파이썬 알고리즘 인터뷰 - 가장 긴 팰린드롬 부분 문자열 (*) 본문

코딩테스트

파이썬 알고리즘 인터뷰 - 가장 긴 팰린드롬 부분 문자열 (*)

Gogozzi 2022. 5. 15. 13:51
반응형

문제

가장 긴 팰린드롬 부분 문자열을 출력하라.

팰린드롬?

회문 또는 팰린드롬은 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열 등이다. 보통 낱말 사이에 있는 띄어쓰기나 문장 부호는 무시한다. 예를들어 다시 합창 합시다, 소주 만병 만 주소 등이 있다.

입력

"babad"
"cbbd"

출력

"bab"
"bb"

작성한 코드

def logestPalindrome(s: str) -> str:
    def expand(left: int, right: int) -> str:
        # 팰린드롬 여부를 체크하며 포인터 확장
        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):
        # 팰린드롬은 짝수, 홀수 경우 모두 나타나기 때문에 2가지 형태의 포인터 사용
        result = max(result,expand(i, i + 1),expand(i, i + 2),key=len)

    return result

회고

이해가 잘 안될때는코드를 분해해서 전부 찍어보거나 디버그 돌리면서 데이터의 흐름을 파악하는것도 좋은 방법인것 같다.

시간내서 다시 풀어 봐야겠다.

반응형
Comments