[Programmers] 가장 긴 팰린드롬 바로가기
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다.
문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.
예를들면, 문자열 s가 "abcdcba"이면 7을 return하고 "abacde"이면 3을 return합니다.
s | answer |
---|---|
"abcdcba" | 7 |
"abacde" | 3 |
입출력 예 #1
4번째자리 'd'를 기준으로 문자열 s 전체가 팰린드롬이 되므로 7을 return합니다.
입출력 예 #2
2번째자리 'b'를 기준으로 "aba"가 팰린드롬이 되므로 3을 return합니다.
abba
→ ab
, ba
대칭abcba
→ c
를 기준으로 ab
, ba
대칭if N > 1 and s[0] == s[1]: answer = 2
else: answer = 1
2,500 이하의 자연수
임을 알 수 있다.s
)의 길이가 2 이상이고 첫번째 문자와 두번째 문자가 같다면 answer
의 값을 2로 초기화한다.aabcde
문자열 중 첫번째, 두번째 문자를 원소로 하는 부분 문자열인 aa
문자열을 앞뒤를 뒤집어도 aa
가 되므로 팰린드롬이다.s
)의 길이가 1이거나 첫번째, 두번째 문자가 다르다면 answer
의 값을 1로 초기화한다.a
문자열은 앞뒤를 뒤집어도 a
가 되므로 팰린드롬이다.def lengthPalindrome(start,end):
length = end - start - 1
while start >= 0 and end < N and s[start] == s[end]:
length += 2
start, end = start-1, end+1
return length
lengthPalindrome
함수의 인자인 start, end
는 문자열의 시작과 끝 지점이다.length
)의 초기값은 문자열의 시작과 끝 지점의 차이값이다.s
)를 벗어나지 않고, 문자열의 시작과 끝 지점의 값이 같다면length
) 값을 2
증가시키고1
증감시킨다.for i in range(1,N-1):
# 홀수 팰린드롬
if s[i-1] == s[i+1]:
answer = max(answer, lengthPalindrome(i-1,i+1))
# 짝수 팰린드롬
if s[i] == s[i+1]:
answer = max(answer, lengthPalindrome(i,i+1))
i
)를 기준으로 양 옆의 문자가 같다면 양 옆의 위치(i-1, i+1
)를 인자로 하는 lengthPalindrome()
함수의 결과값을 구한 후 최대 값을 갱신한다.i
)의 문자와 오른쪽의 문자(i+1
)가 같다면 해당 위치(i, i+1
)를 인자로 하는 lengthPalindrome()
함수의 결과값을 구한 후 최대 값을 갱신한다.def solution(s):
s, N = list(s), len(s)
# answer 초기화
if N > 1 and s[0] == s[1]: answer = 2
else: answer = 1
# 팰린드롬 길이 계산
def lengthPalindrome(start,end):
length = end - start - 1
while start >= 0 and end < N and s[start] == s[end]:
length += 2
start, end = start-1, end+1
return length
for i in range(1,N-1):
# 홀수 팰린드롬
if s[i-1] == s[i+1]:
answer = max(answer, lengthPalindrome(i-1,i+1))
# 짝수 팰린드롬
if s[i] == s[i+1]:
answer = max(answer, lengthPalindrome(i,i+1))
return answer