1. 程式人生 > >208.實現Trie(字首樹)

208.實現Trie(字首樹)

實現一個 Trie (字首樹),包含 insertsearch, 和 startsWith 這三個操作。

示例:

Trie trie = new Trie();

trie.insert("apple");
trie.search("apple");   // 返回 true
trie.search("app");     // 返回 false
trie.startsWith("app"); // 返回 true
trie.insert("app");   
trie.search("app");     // 返回 true

說明:

  • 你可以假設所有的輸入都是由小寫字母 a-z 構成的。
  • 保證所有輸入均為非空字串。

class TrieNode { public:     // Initialize your data structure here.     TrieNode *child[26];     bool isWord;     TrieNode() : isWord(false){         for (auto &a : child) a = NULL;     } }; class Trie { public:     /** Initialize your data structure here. */     Trie() {         root = new TrieNode();     }          /** Inserts a word into the trie. */     void insert(string word) {         TrieNode *p = root;         for (auto &a : word)          {             int i = a - 'a';             if (!p->child[i])                  p->child[i] = new TrieNode();             p = p->child[i];         }         p->isWord = true;     }          /** Returns if the word is in the trie. */     bool search(string word) {         TrieNode *p = root;         for (auto &a : word) {             int i = a - 'a';             if (!p->child[i])                  return false;             p = p->child[i];         }         return p->isWord;     }          /** Returns if there is any word in the trie that starts with the given prefix. */     bool startsWith(string prefix) {         TrieNode *p = root;         for (auto &a : prefix) {             int i = a - 'a';             if (!p->child[i])                  return false;             p = p->child[i];         }         return true;     }     /*void Delete(TrieNode *p)     {         for(int i=0;i<26;i++)         {             if(p->child[i] != NULL)                 Delete(p->child[i]);         }         delete p;     }     ~Trie()     {         if(root != NULL)             Delete(root);     }*/ private:     TrieNode* root; };

/**  * Your Trie object will be instantiated and called as such:  * Trie obj = new Trie();  * obj.insert(word);  * bool param_2 = obj.search(word);  * bool param_3 = obj.startsWith(prefix);  */