앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다.
문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.
예를들면, 문자열 s가 "abcdcba"이면 7을 return하고 "abacde"이면 3을 return합니다.
| s | answer |
|---|---|
| "abcdcba" | 7 |
| "abacde" | 3 |
O(N^2)의 시간복잡도가 걸릴 것으로 예상했고, N이 최대 2,500이기 때문에 알맞은 알고리즘이라고 생각했다.#include <iostream>
#include <string>
using namespace std;
int solution(string s)
{
int answer = 0;
for(int i = 0; i < s.size(); i++){
int k = 1;
while (i - k >= 0 && i + k < s.size() && s[i - k] == s[i + k]){
k++;
}
if (2 * (k - 1) + 1 > answer){
answer = 2 * (k - 1) + 1;
}
if(s[i] == s[i + 1]){
k = 1;
while (i - k >= 0 && i + 1 + k < s.size() && s[i - k] == s[i + 1 + k]){
k++;
}
if(2 * (k - 1) + 2 > answer){
answer = 2 * (k - 1) + 2;
}
}
}
return answer;
}