티스토리 뷰

문제 링크

https://algospot.com/judge/problem/read/HABIT

 

algospot.com :: HABIT

말버릇 문제 정보 문제 대중 앞에서 연설이나 강의를 하는 사람들은 말 중간중간에 습관적으로 들어가는 말버릇들을 없애기 위해 많은 노력을 합니다. 강의를 하는 사람이 한 마디 할 때마다 "��

algospot.com

 

접미사 배열을 이용해서 푸는 문제입니다.

접미사 배열이란 문자열에서 나타날 수 있는 모든 접미사들을 사전순으로 정렬해 둔 배열을 말합니다.

 

banana 라는 문자열의 접미사는 아래와 같이 총 6개가 있습니다.

 

이 접미사들을 사전순으로 정렬을 하면 a가 가장 먼저오고 na가 가장 마지막에 오게됩니다.

이렇게 정렬된 각 접미사들의 전체 문자열 시작위치가 접미사 배열이 됩니다.

 

예시에서 접미사 a의 시작위치는 banana의 가장 마지막인 5가 되고

접미사 na의 시작위치는 4가 됩니다.

 

문제에서 부분 문자열이 k번 이상만큼 여러번 나오려면 항상 인접한 접미사들의 접두사로 나오게됩니다.

따라서 인접한 모든 접미사의 공통 접두사가 k번 이상 나오는지를 접미사 배열을 통해 확인하면 됩니다.

 

위에서 구한 접미사 배열을 순서대로 살펴보면

1번부터 3번까지의 접미사들의 접두사가 모두 a로 같기 때문에 s에서 가장 많이 나오는 부분 문자열이 됩니다.

 

문제 링크