https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRrK7KhO4DFAUo
가장 긴 팰린드롬 부분문자열을 구해야 하므로 부분문자열의 길이를 점점 줄여가며 검사하고자 했다. 그리고 길이가 줄어들면 원래의 문자열에 대해 한 자리씩 옮겨가며 부분문자열을 검사해야 하는데 (ex. 'abcdc'에서 길이가 4일 때는 'abcd'와 'bcdc'를 검사해야 하듯이) 이 부분에서 슬라이싱을 잘못해서 처음에 패스가 안 됐었다.
아무튼 이 부분을 수정하고, 가장 먼저 True가 나온 경우가 최대 부분문자열 길이이므로 바로 break를 해주도록 했다.
def is_palindrome(word):
n = len(word)
for i in range(n // 2):
if word[i] != word[-i - 1]:
return False
return True
T = int(input())
for tc in range(1, T+1):
txt = input()
N = len(txt)
result = 0
# 길이를 점점 줄여가며 검사
for length in range(N, 0, -1):
start = 0
while start + length <= N:
# 팰린드롬 확인: True 가 가장 먼저 리턴될 때가 최대 길이 -> break
if is_palindrome(txt[start:start + length]):
result = length
break
start += 1
if result != 0:
break
print('#{} {}'.format(tc, result))