A Trie maintains a set of strings in by maintaining a deterministic finite automaton that accepts and only accepts strings in . Specifically, let be a set of all prefixes of strings in , be a function in satisfying
Then it is easy to prove that is a deterministic finite automaton that accepts and only accepts strings in . This costs a space of .
Add
Add updates to in time and space.
Updating the values in that is changed by yields an algorithm that solves the problem in time and space.
int o = 1;
for (char c : s) {
if (!next[o][c]) {
next[o][c] = next.size();
next.emplace_back();
f.push_back(false);
}
o = next[o][c];
}
f[o] = true;Find
Find checks if in time and space.
Running on yields an algorithm that solves the problem in time and space.
int o = 1;
for (char c : s) {
o = next[o][c];
}
return f[o];