문제 링크
- http://icpc.me/3308
문제 출처
- 2011 CEOI Day1 2번
사용 알고리즘
- KMP
- 세그먼트 트리
시간복잡도
- $O((N+K) \log K)$
풀이
문자열 $A_i = H_i$에서 패턴 $P_i = S^{-1}_i$를 찾는 문제입니다.
부분 문자열과 패턴이 완전히 일치하는 경우 뿐만 아니라, 좌표 압축한 결과가 같을 때도 매칭시킵니다.
KMP를 적용할 수 있다는 생각이 듭니다.
두 문자가 같은지 확인하는 것 대신, 두 원소가 문자열에 각각 추가되었을 때 서로 자신보다 작은 원소의 개수와 큰 원소의 개수가 각각 같은지(등수가 같은지) 확인하면 됩니다. 등수가 같은지 확인하는 것은 Segment Tree나 Fenwick Tree 등의 자료구조로 쉽게 확인할 수 있습니다.
전체 코드
1 |
|