반복되는 가장 긴 부분 문자열

시간 제한1초메모리 제한256 MB

요약
길이 최대 200000인 소문자 문자열에서 겹치는 것도 허용하여 두 번 이상 등장하는 부분 문자열의 최대 길이를 구합니다.
난이도

보통10점 중 7점

유형
문자열, 이분 탐색, 문자열 매칭
정답자
아직 제출이 없습니다

문제

상근이는 꿈에서 길이가 L인 문자열을 외웠고, 깨어난 뒤 그 문자열을 종이에 적었다. 적어 둔 문자열 안에서 어떤 연속한 부분 문자열이 두 번 이상 나타나는지 궁금해졌다.

길이가 L인 소문자 문자열이 주어질 때, 두 번 이상 등장하는 부분 문자열 중 가장 긴 것의 길이를 구하라. 두 등장 위치는 서로 겹쳐도 된다.

입력

첫째 줄에 정수 L이 주어진다. (1 <= L <= 200000)

둘째 줄에 길이가 L이고 알파벳 소문자로만 이루어진 문자열 S가 주어진다.

출력

두 번 이상 등장하는 부분 문자열 중 길이가 가장 긴 것의 길이를 출력한다. 그런 부분 문자열이 없으면 0을 출력한다.

예제3

  1. 예제 1

    입력
    11
    sabcabcfabc
    
    예상 출력
    3
    
  2. 예제 2

    입력
    18
    trutrutiktiktappop
    
    예상 출력
    4
    
  3. 예제 3

    입력
    6
    abcdef
    
    예상 출력
    0