字典树
一、类的实现
请你实现 Trie 类:
Trie() 初始化前缀树对象。
void insert(String word) 向前缀树中插入字符串 word 。
boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。
boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false 。
二、代码实现
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
| class Trie{ private: vector<Trie*>children; bool isEnd; Trie *searchPrefix(string prefix) { Trie*node = this; for(char ch : prefix) { ch = ch - 'a'; if(node->children[ch]==nullptr) return nullptr; node = node->children[ch]; } return node; } public: Trie() : children(26), isEnd(false){} void insert(string word) { Trie *node=this; for(char ch:word) { ch = ch -'a'; if(node->children[ch] = nullptr) node->children[ch] = new Trie(); node = node->children[ch]; } node->isEnd = true; } bool search(string word) { Trie *node = this->searchPrefix(word): return node!=nullptr && node->isEnd == true; } bool startsWith(string prefix) { return this->searchPrefix(prefix)!=nullptr; } }
|