5. Longest Palindromic Substring

kukudas·2022년 2월 18일
0

Algorithm

목록 보기
4/46
class Solution:
    def longestPalindrome(self, strs):

        # 현재 가장 긴 팰린드롬
        cur = ""
        
        # 단어가 한 글자거나 전체가 펠린드롬일 경우
        if len(strs) < 2 or strs == strs[::-1]:
            return strs

        def check(left, right):
            # 왼쪽 오른쪽이 인덱스 범위 안이고 양쪽 값이 같으면 펠린드롬이니 확장해서 또 펠린드롬인지 찾아봄
            while left >= 0 and right < len(strs) and strs[left] == strs[right]:
                left -= 1
                right += 1
            
            # 창 확장했는데 조건 안맞아서 while 나오게 되면 하나씩 줄여야하니까 아래처럼 리턴해야함
            # strs[left + 1:right]하면 인덱스가 left + 1 부터 right -1까지임
            # 만약에 팰린드롬이 없을 경우에는 3칸짜리 창에서 구한 글자 하나가 팰린드롬으로 리턴됨
            # 예를들어서 `ba`일때 strs[0 + 1:2] 여서 'a'return strs[left + 1:right]

        # 팰린드롬을 못찾으면 창의 위치를 오른쪽으로 한 칸씩 계속 옮겨줌
        for i in range(0, len(strs) - 1):
            # 현재 가장 긴거랑, 현재 위치에서 2칸짜리 창을 확장해서 찾은 팰린드롬이랑, 3칸짜리 창을 확장해서 찾은 팰린드롬이랑
            # 길이를 비교해서 가장 긴 팰린드롬을 저장해줌.
            cur = max(cur, check(i, i + 1), check(i, i + 2), key=len)

        return cur

출처

0개의 댓글