회문 Batch
시간 제한 | 메모리 제한 | 제출 횟수 | 제출한 사람 수 | 해결한 사람 수 | 정답률 |
---|---|---|---|---|---|
1000 ms | 128 MiB | 2491 | 415 | 277 | 66.75% |
영문 소문자로 구성된 문자열(string)이 주어져 있다. 이 문자열의 부문자열(substring)들에 대해서 "점수"를 정의하는데, 점수는 부문자열의 길이에 그 부문자열이 전제 문자열에 등장하는 횟수를 곱한 값이다. 주어진 문자열에 대해 회문(palindrome)이 되는 부문자열들 중 가장 높은 점수를 가진 것을 찾아서 그 점수를 출력하는 프로그램을 작성하라.
입력
입력은 단 한 줄이며, 영문 소문자(a-z)로 구성된 문자열이 주어진다.
출력
출력은 하나의 자연수이며 회문이 되는 부문자열들에서 찾을 수 있는 가장 높은 점수이다.
예제
예제 1
입력
abacaba
출력
7
예제 2
입력
wow
출력
4
추가 설명
문자열 $s$에 대해서 $|s|$는 그 길이를 말한다.
부문자열은 문자열 $s_{1}, s_{2}, \cdots, s_{|s|}$의 임의의 연속적인 일부분, 즉 $s_{i}s_{i+1}\cdots s_{j}$ ($1 \le i \le j \le |s|$)이다. 문자열 전체도 자신의 부문자열이다.
어떤 문자열이 회문이라 함은 그 문자열을 앞에서 뒤로 읽으나 뒤에서 앞으로 읽으나 동일한 경우를 말한다.
입출력 예의 첫 번째 경우의 문자열에 회문이 되는 부문자열은 모두 일곱 가지이다: a
, b
, c
, aba
, aca
, bacab
, abacaba
.
a
는 문자열에 네 번 등장하므로 점수는 $4 \times 1 = 4$점이다.b
는 문자열에 두 번 등장하므로 점수는 $2 \times 1 = 2$점이다.c
는 문자열에 한 번 등장하므로 점수는 $1 \times 1 = 1$점이다.aba
는 문자열에 두 번 등장하므로 점수는 $3 \times 2 = 6$점이다.aca
는 문자열에 한 번 등장하므로 점수는 $3 \times 1 = 3$점이다.bacab
는 문자열에 한 번 등장하므로 점수는 $5 \times 1 = 5$점이다.abacaba
는 문자열에 한 번 등장하므로 점수는 $7 \times 1 = 7$점이다.
따라서, 회문들 중 가장 높은 점수는 7점이다.
채점
다음과 같은 다섯 개의 서브태스크로 채점이 이루어 진다.
- (8점) $1 \le |s| \le 100$
- (15점) $1 \le |s| \le 1000$
- (24점) $1 \le |s| \le 10000$
- (26점) $1 \le |s| \le 100000$
- (27점) $1 \le |s| \le 300000$
문제 출처