https://school.programmers.co.kr/learn/courses/30/lessons/12904
음
이분탐색
이군
근데 다만, 처음에는 substr
을 쓴 다음에, 각 문자열에 대해서 이분탐색을 진행했고, 시간초과가 났다.
그래서 생각해봤는데,
이분탐색에서 시작값을 중간값으로 두고, left, right 두 개를 옆으로 옮겨주면 될 것 같았다.
그래서 시작점에서부터 검사 함수를 하나씩 돌려주고,
펠린드롬이 짝수인 경우를 대비해준다.
홀수인 경우,
left = right이면 되지만,
짝수인경우,
left , right여야 한다 (left, right가 다를 수 있음)
그래서 돌리면 된답.
#include <iostream>
#include <string>
using namespace std;
int isPalindrome(string& s, int left, int right)
{
while(left >= 0 && right < s.length()) {
if (s[left] != s[right]) break;
left--;
right++;
}
return right - left - 1;
}
int solution(string s)
{
int answer=0;
for (int i = 0 ; i < s.length() ; i++) {
answer = max(answer, isPalindrome(s, i, i));
answer = max(answer, isPalindrome(s, i-1, i));
}
return answer;
}