복붙하기

시간 제한2초메모리 제한512 MB

요약
길이 200,000 이하의 소문자 문자열이 주어질 때, 서로 겹치지 않는 두 위치에 나타나는 가장 긴 부분 문자열의 길이를 구하고, 그런 문자열이 없으면 -1을 출력한다.
난이도

어려움10점 중 8점

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

문제

윤표는 만사가 귀찮은 친구다. 그래서 문자열을 입력할 때, 중복되는 부분이 있으면, 앞서 나온 부분 문자열을 복사해서 붙여넣어야 마음이 편안하다.

윤표는 매번 자신이 위치를 직접 기억하여 붙여넣다가, 복사붙여넣기를 도와주는 프로그램을 만들려고 한다.

문자열이 주어졌을 때, 해당 문자열에서 겹치지 않게 두 번 이상 반복되는 가장 긴 부분 문자열의 길이를 출력하는 프로그램을 작성하시오.

입력

알파벳 소문자로 이루어진 문자열이 주어진다. 주어지는 문자열의 길이는 1 이상 200,000 이하이다.

출력

주어진 문자열에서 겹치지 않게(disjoint) 두 번 이상 등장하는 가장 긴 문자열의 길이를 출력한다.

단, 조건을 만족하는 문자열이 없는 경우 -1을 출력한다.

예제4

  1. 예제 1

    입력
    applebananacarrotapple
    
    예상 출력
    5
    
  2. 예제 2

    입력
    abcdefghijklmnop
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    dotzsdultvofkudispdoowrhwldssvtzldwiyihpjwsxfdvjhbdubeiojlcnzjazvtzldwiyihpjwsxfdvjhbdubvxgrwe
    
    예상 출력
    24
    
  4. 예제 4

    입력
    aaaaaaa
    
    예상 출력
    3