아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

부분 문자열의 문자

면접 대비

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

요약
각 문자열에 대해 전체 문자열과 같은 문자 집합을 가지며 양끝을 줄일 수 없는 서로 다른 진부분문자열의 개수를 센다.
난이도

보통10점 중 4점

유형
문자열, 투 포인터, 해시맵, 완전 탐색
정답자
아직 제출이 없습니다

문제

문자열에 등장하는 서로 다른 문자의 집합을 그 문자열의 일반화된 주기라고 부른다. 예를 들어 문자열 "aabbabb"의 일반화된 주기는 {'a','b'}이다.

진부분 문자열은 어떤 문자열에 포함되면서 그 문자열 자체는 아닌 연속된 부분 문자열이다. 따라서 "aabbabb"는 위 예시의 진부분 문자열이 아니다.

최소 진부분 문자열은 양쪽 끝에서 어떤 문자도 제거하지 않고서는 같은 일반화된 주기를 유지할 수 없는 진부분 문자열이다. "aabb"는 예시의 진부분 문자열이지만 최소가 아니다. "ab"는 최소이다.

서로 다른 것이라는 말은, 문자열 안에서 같은 최소 진부분 문자열이 여러 번 나타나더라도 한 번만 센다는 뜻이다. 예시에서 "ab"는 두 번 나타나지만 한 번만 센다. 따라서 전체 문자열과 같은 일반화된 주기를 가지는 진부분 최소 문자열의 개수는 두 개이다. "ab"와 "ba"이다.

여러분의 팀은 주어진 문자열에 대해, 그 문자열 자체와 같은 일반화된 주기를 가지는 진부분 최소 문자열의 개수를 세는 프로그램을 작성해야 한다.

입력

입력은 파일의 끝까지 이어지는 여러 줄로 주어진다. 각 줄은 영숫자(a--z, A--Z, 0--9)로 이루어진 하나의 테스트 케이스이다. 대문자와 소문자는 서로 다른 문자이다. 개행 문자는 테스트 케이스 문자열에 포함되지 않는다. 테스트 케이스 문자열의 길이는 8080자를 넘지 않는다. 입력에는 테스트 문자열이 최대 100100개 있다.

출력

각 입력 줄에 대해, 입력 문자열의 진부분 최소 문자열 중 전체 문자열과 같은 일반화된 주기를 가지는 것의 개수를 한 줄에 출력한다. 앞뒤 공백이나 불필요한 부호, 앞에 붙는 0이 없어야 한다.

예제1

  1. 예제 1

    입력
    aabbabb
    abAB34aB3ba7
    104001144
    aaabcaaa
    a
    bb
    bd
    1234567
    
    예상 출력
    2
    1
    3
    2
    0
    1
    0
    0