단순히 모든 부분문자열에 대해 펠린드롬인지를 검사해 보는 브루트 포스 방법도 있겠지만(나중에 이 방법도 통과되는 걸 알았다) 좀 더 빠른 시간 내에 풀이해보픈 마음에 다른 방법으로 풀이하였다.
어떤 펠린드롬 문자열에서 양 끝에 같은 문자가 더해지면 그 문자열 역시 펠린드롬이 된다는 점을 이용할 수 있다. 즉 홀수길이 펠린드롬의 경우 길이 1의 문자열을 중심축으로 좌우가 동일한지 재귀적으로 검사해나가면 되며, 짝수 길이 펠린드롬은 두 개의 같은 문자로 이루어진 길이 2의 문자열을 중심축으로 하면 된다.
풀이 코드
def solution(s):
answer = 1
length = len(s)
for i in range(length) :
if i < length - 1 and s[i+1] == s[i] :
tmp = 0
l, r = i, i+1
while -1 < l < r < length and s[l] == s[r] :
tmp += 2
l -= 1
r += 1
answer = max(answer, tmp)
if 0 < i < length - 1 :
tmp = 1
l, r = i-1, i+1
while -1 < l < r < length and s[l] == s[r] :
txqmp += 2
l -= 1
r += 1
answer = max(answer, tmp)
return answer