반응형
#include <iostream>
#include <string>
using namespace std;
const int ROOT = 1;
int unused = 2;
const int MX = 10000 * 500 + 5; // 최대 등장 가능한 글자의 수
bool chk[MX];
int nxt[MX][26];
int c2i(char c) {
return c - 'a';
}
void insert(string& s) {
int cur = ROOT;
for (auto c : s) {
if (nxt[cur][c2i(c)] == -1)
nxt[cur][c2i(c)] = unused++;
cur = nxt[cur][c2i(c)];
}
chk[cur] = true;
}
bool find(string& s) {
int cur = ROOT;
for (auto c : s) {
if (nxt[cur][c2i(c)] == -1)
return false;
cur = nxt[cur][c2i(c)];
}
return chk[cur];
}
void erase(string& s) {
int cur = ROOT;
for (auto c : s) {
if (nxt[cur][c2i(c)] == -1)
return;
cur = nxt[cur][c2i(c)];
}
chk[cur] = false;
}
int main(void) {
for (int i = 0; i < MX; i++)
fill(nxt[i], nxt[i] + 26, -1);
}
접미사 트라이(Suffix Trie)
본 문서는 다음 내용을 편역 하였다. Suffix array - a contest approach - CS 97SI(http://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCoQFjAA&url=http%3A%2F%2Fcs97si.stanford.edu%2Fsuffix-array.pdf&ei=69ytUIj-DMbvsga-7
juggernaut.tistory.com
https://namu.wiki/w/%ED%8A%B8%EB%9D%BC%EC%9D%B4
트라이
우리가 여러 개의 문자열을 가지고 있을 때, 어떤 문자열이 그 문자열 중 하나인지 알아내는 방법은 뭐가 있을까? 단
namu.wiki
반응형
'알고리즘 > 코드' 카테고리의 다른 글
이분탐색 lower bound ,upper bound C++ 코드 (0) | 2025.02.07 |
---|---|
크루스칼,프림 알고리즘 C++ 코드 (1) | 2025.02.07 |
Union-Find C++ 코드 (0) | 2025.02.05 |
CCW (Counter ClockWise) C++ 코드 (1) | 2024.11.28 |
벨만포드 C++ 코드 (0) | 2024.11.06 |