6장_6 문자열 조작(가장 긴 팰린드롬 부분 문자열)

김동민·2021년 9월 27일
0

가장 긴 팰린드롬 부분 문자열을 출력하라.
예 1:
Input: s = "babad"
Output: "bab"
Note: "aba" 또한 정답이다.

class Solution:
    def longestPalindrome(self, s: str) -> str:
        def expand(left, right):
            while left >= 0 and right < len(s) and s[left] == s[right]:
                left -= 1
                right += 1
            return s[left+1:right]
        
        if len(s) < 2 or s == s[::-1]:
            return s
        
        result = ''
        
        #양 옆으로 펼쳐나가기를 시작할 지정
        for i in range(len(s) - 1): # 0 ~ n-1
            result = max(result,expand(i, i),expand(i, i+1),key=len)
        return result
def expand(left, right):
while left >= 0 and right < len(s) and s[left] == s[right]:

expand라는 함수를 만든다.
조건으로는 left가 0보다 크고 right는 문자열보다 작다. 그리고 s[left]와 s[right]가 같다.

left -= 1
right += 1
return s[left+1:right]

left는 1씩 감소 right는 1씩 중가하다가 끝까지 가면 반환한다.

if len(s) < 2 or s == s[::-1]:
           return s

만약 문자열이 2보다 작다는 것은 1개의 단어만이 최대 팰린드롬이라는 것이고 또는 전체 문자열이 거꾸로 했을 때와 같다면 더 비교할 것 없이 반환하면 된다.

그렇지 않다면 다른 방법으로 최대 팰린드롬을 찾아야하는데 일단 result = ''로 초기화해준다.

for i in range(len(s) - 1): # 0 ~ n-1
           result = max(result,expand(i, i),expand(i, i+1),key=len)
       return result

문자들을 펼쳐나가며 가장 긴 것을 출력할 것인데 최대값을 뽑는다. result가 갖는 길이, expand(i, i) 짝수 팰린드롬, expand(i, i+1) 홀수 팰린드롬 이 3가지 중에서 가장 긴값을 갖는 길이가 키값이 된다.
그리고 그 값을 반환한다.


profile
틀리면 당신이 맞습니다... 개발하며 얻은 지식창고

0개의 댓글