力扣 hot100 Day57
208. 实现 Trie (前缀树)
Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。
请你实现 Trie 类:
Trie()
初始化前缀树对象。void insert(String word)
向前缀树中插入字符串word
。boolean search(String word)
如果字符串word
在前缀树中,返回true
(即,在检索之前已经插入);否则,返回false
。boolean startsWith(String prefix)
如果之前已经插入的字符串word
的前缀之一为prefix
,返回true
;否则,返回false
。
//抄的
class Trie {
private:vector<Trie*> children;bool isEnd;Trie* searchPrefix(string prefix){Trie* node = this;for(char ch:prefix){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-='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;}bool startsWith(string prefix) {return this->searchPrefix(prefix)!=nullptr;}
};
这里相当于,实现了一个26叉数,数组索引方便一一调用,isEnd布尔值方便逻辑判断
searchPrefix函数作用是查找一个前缀对应的节点,逻辑就是类似于二叉树的查找,如果找不到返回nullptr,如果找到就返回对应节点
insert函数与searchPrefix类似,将查找转换为生成,如果有不操作,如果没有就new一个
search和startsWith函数就是searchPrefix函数的简单调用