hiho一下第二週#1014 : Trie樹
阿新 • • 發佈:2019-02-14
Trie樹即為字首樹,通過它可以找到字首相同的字串。
class Trie {
private:
int count; //用於計數
Trie *next[26];
public:
Trie() :count(1) {
for (unsigned i{ 0 }; i < 26; ++i) next[i] = NULL;
}
void insert(Trie *root, string &s) {
Trie *p = root;
for (unsigned i{ 0 }; i < s.size(); ++i) {
unsigned j = s[i] - 'a';
if (p->next[j]) {
++p->next[j]->count;
}else{
Trie *q = new Trie;
p->next[j] = q;
}
p = p->next[j];
}
}
int query(Trie *root, string &s) {
bool flag = false ;
Trie *p = root;
for (unsigned i{ 0 }; i < s.size(); ++i) {
unsigned j = s[i] - 'a';
if (!p->next[j]) {
flag = true;
break;
}
p = p->next[j];
}
if (flag) return 0;
else return p->count;
}
};