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
출처