회문 길이
시간 제한0.5초메모리 제한2048 MB
소문자로 이루어진 최대 100,000자 문자열을 회문인 부분 문자열들로 겹치지 않게 나눌 때, 필요한 최소 개수를 구합니다.
문제
어떤 문자열을 앞에서 읽든 뒤에서 읽든 같으면 회문이라고 한다. 회문은 문자열의 비대칭성처럼 복잡도를 재는 데 쓸모가 있다.
길이가 인 문자열 의 비대칭성은 회문 길이 로 잴 수 있다. 는 를 회문인 부분 문자열들로 나눌 때 필요한 최소 개수이다. 정확히 말하면, 는 을 만족하는 최소의 정수 로, 회문인 부분 문자열 가 존재해서 이들을 이어 붙인 가 와 같아야 한다. 를 로 나눈 것은 | | | 로 표기한다.
예를 들어 abaaca는 aba | aca로 두 회문으로 나눌 수 있고 이것이 최소이므로, abaaca의 경우 이다. acaba는 두 회문으로 나눌 수 없지만 aca | b | a나 a | c | aba처럼 세 개로 나눌 수 있으므로, acaba의 경우 이다. radar는 그 자체로 회문이므로 이다. abcde의 경우 이다.
입력
첫 줄에 양의 정수 ()이 주어진다. 은 문자열의 글자 수이다. 다음 줄에는 영문 소문자 개로 이루어진 문자열이 주어진다. 글자 사이에는 공백이 없다.
출력
입력된 문자열 의 회문 길이 를 한 줄에 출력한다. 이 값은 양의 정수이다.