문제
백준 6206
임의의 길이의 반복된 부분 문자열을 찾는 문제이다.
기본적인 전략은 \(\mathrm{K}\) 번 반복되는 부분 문자열의 길이인 \(\mathrm{M}\) 를 이분탐색으로 찾아보는 것이다. 그러면 고정 길이의 부분 문자열이 몇번 반복되는지 찾는 문제로 환원된다.
Rabin Carp
상수커팅을 안하면 시간제한에 걸릴 모양.
시간 복잡도
O(\((\mathrm{N} + \mathrm{N} \mathrm{K} )\log{\mathrm{N}}\))
- \(\mathrm{K}\) 번 반복되는 문자열이 존재한다면 문자열 비교를 \(\mathrm{K}\) 번 해야한다. 부분문자열의 길이는 알 수 없으므로 문자열 비교에 대충 O(\(\mathrm{N}\)) 걸린다고 가정하고 러프하게 구했다.
코드
LCP
longest common prefix array 로 길이가 m
이상의 부분문자열이 몇번 반복되는지 선형시간에 구할 수 있다.
좌표압축을 사용하면 사용공간을 꽤나 줄일 수 있다.
시간 복잡도
O(\(\mathrm{N}\log{\mathrm{N}}\))
코드
댓글남기기