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;     } };
 
 
 
 
 
 
 
 
  |