Trie算法总结
基本思想:
对于Trie类的题目,如果题目要求对多个字符串同时进行处理且有和DFS/BFS结合(这一般是hard题的难度),或者和前缀有关的操作,就应该要考虑到使用Trie的可能性。如果说常规DFS/BFS对字符串处理的解法效率不能达到目标,但又不至于超时,很大可能性就会使用Trie这种数据结构,具体实现可参见Leetcode 208,不过一般情况下只需要insert函数即可,常规代码如下,针对具体问题可能会有不同的操作函数。
1 struct TrieNode{ 2 TrieNode *next[26]; 3 bool isEnd; 4 TrieNode():isEnd(false){ 5 for(int i = 0;i != 26;++i) 6 next[i] = NULL; 7 } 8 }; 9 class TrieTree{ 10 public: 11 TrieTree(){ 12 root = new TrieNode(); 13 } 14 15 void insert(string word) { 16 TrieNode *current = root; 17 for(int i = 0;i != word.size();++i){ 18 if(current->next[word[i]-'a'] == NULL) 19 current->next[word[i]-'a'] = new TrieNode(); 20 current = current->next[word[i]-'a']; 21 } 22 current->isEnd = true; 23 } 24 struct TrieNode *getRoot(){ 25 return root; 26 } 27 private: 28 TrieNode *root; 29 };