만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

좋은 부분 문자열

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

요약
a와 b로 이루어진 문자열에서 서로 겹치지 않는 두 위치에 나타나는 서로 다른 부분 문자열의 개수를 센다.
난이도

어려움10점 중 8점

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

문제

a와 b로만 이루어진 문자열 SS가 있다. SS의 부분 문자열 PP가 SS 안에서 서로 겹치지 않게 두 번 이상 나타나면 PP는 좋은 부분 문자열이다. 다시 말해 PP가 ii번째 위치와 jj번째 위치에서 시작해 나타나고 j−ij - i가 PP의 길이보다 크거나 같은 두 위치 i<ji < j가 있으면, PP는 좋은 부분 문자열이다.

SS가 aaaabb이면 좋은 부분 문자열은 a, aa, b이다. aaa는 SS에 두 번 나타나지만 두 등장이 겹치므로 좋은 부분 문자열이 아니다.

문자열 SS가 주어졌을 때, 서로 다른 좋은 부분 문자열의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 문자열 SS가 주어진다. SS는 a와 b로만 이루어지고, 길이는 1 이상 100,000 이하이다.

출력

첫째 줄에 SS의 서로 다른 좋은 부분 문자열의 개수를 출력한다.

예제6

  1. 예제 1

    입력
    aaaa
    
    예상 출력
    2
    
  2. 예제 2

    입력
    aaaabb
    
    예상 출력
    3
    
  3. 예제 3

    입력
    bbaabb
    
    예상 출력
    3
    
  4. 예제 4

    입력
    babbaaaaab
    
    예상 출력
    5
    
  5. 예제 5

    입력
    abbaabaaabb
    
    예상 출력
    9
    
  6. 예제 6

    입력
    aaaaaaaabbaaabbaaaaaaababaaaababaaaaaaaaaabaaaaaaab
    
    예상 출력
    63