Trie广泛应用于路径补全、字符串匹配
class Trie{
struct Node {
bool is_end; // 当前结点是否为某字符串结尾
vector<Node*> sons; // 所有可能儿子 a-z
// unordered_map<string, Node*> sons;
Node(){
is_end = false;
sons.resize(26); // a-z
}
}*root;
Trie(){
root = new Node();
}
void insert(string word) {
auto p = root;
for(auto c : word) {
int u = c - 'a';
if(!p->sons[u]) p->sons[u] = new Node();
// if(!p->sons[c]) p->sons[c] = new Node();
p = p->sons[u];
}
}
bool search(string word) {
auto p = root;
for(auto c : word) {
int u = c - 'a';
if(!p->sons[u]) return false;
p = p->sons[u];
}
return p->is_end;
}
}