1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| class Trie { struct TrieNode { TrieNode() : children({nullptr}), isEnd(false) {}
TrieNode *children[26]; bool isEnd; };
TrieNode *root;
public: Trie() { root = new TrieNode(); }
void insert(string word) { auto p = root; for (const auto &c : word) { if (!p->children[c - 'a']) { p->children[c - 'a'] = new TrieNode(); } p = p->children[c - 'a']; } p->isEnd = true; }
bool search(string word) { auto p = root; for (const auto &c : word) { p = p->children[c - 'a']; if (!p) return false; } return p->isEnd; }
bool startsWith(string prefix) { auto p = root; for (const auto &c : prefix) { p = p->children[c - 'a']; if (!p) return false; } return true; } };
|