class Trie {
public:
Trie* c[26];
bool isstring;
Trie(){
memset(c, 0, sizeof(c));
isstring = false;
}
Trie* searchPrefix(string& prefix) {
Trie* p = this;
for(char& ch: prefix){
int index = ch-'a';
if(!p->c[index]){
return 0;
}
p = p->c[index];
}
return p;
}
void insert(string& word) {
Trie* p = this;
for(char& c: word){
int index = c-'a';
if(p->c[index] == 0){
p->c[index] = new Trie();
}
p = p->c[index];
}
p->isstring = true;
}
bool search(string& word) {
Trie* p = searchPrefix(word);
return p && p->isstring;
}
bool startsWith(string& prefix) {
return searchPrefix(prefix);
}
};
Aplicación de árbol de diccionario:
Consultar si ha aparecido una palabra y la frecuencia de aparición
Consultar si una palabra ha aparecido como prefijo y la frecuencia de aparición
Deduplicación de cadenas
Cuente las k palabras más frecuentes entre n palabras (árbol de diccionario + montón mínimo)
referencia:
Árbol de prefijos Trie animado - Zhihu (zhihu.com)
Trie tree (árbol prefijo) - Luo Songchao - Blog Garden (cnblogs.com)