가장 긴 팰린드롬 부분 문자열을 출력하라.
예 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가지 중에서 가장 긴값을 갖는 길이가 키값이 된다.
그리고 그 값을 반환한다.