티스토리 뷰

 

처음에는 last가 어디까지 비교를 할껀지 비교 문자열의 마지막 인덱스라고 생각했더니 코드가 이해할 수 없었다.

그냥 start로 비교 문자열의 시작 인덱스를 계속 바꿔주기만 하면 되는 것.

그리고 last는 마지막 인덱스가 아니라 비교문자열의 길이가 되는 것이다.

while 문에서 문자열을 비교한다.

만약 원하는 서브 샘플링 길이만큼 팰린드롬의 조건을 만족하면 첫번째 if문으로 들어간다. 

두번째 if문에서는 최대값을 갱신한다. 최대값을 만족하면 해당 for문을 나가서

다음 start 인덱스로 넘어간다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
 
        
int solution(char* s) {
    int answer = 0;
    int s_len = strlen(s);
    int left; int right;
    
    for(int start = 0; start < s_len; start++){
        for (int last = s_len; last > answer; last--){
            left = start; 
            right = left + last - 1;
            while (s[left] == s[right] && left < right){
                left ++;
                right --;
            }
            if(left >= right){
                if(answer < last){
                    answer = last;
                    break;
                }
            }
        }
    }
    
    return answer;
}
댓글