Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。
请你实现 Trie 类:
Trie()
初始化前缀树对象。void insert(String word)
向前缀树中插入字符串word
。boolean search(String word)
如果字符串word
在前缀树中,返回true
(即,在检索之前已经插入);否则,返回false
。boolean startsWith(String prefix)
如果之前已经插入的字符串word
的前缀之一为prefix
,返回true
;否则,返回false
示例:
输入 ["Trie", "insert", "search", "search", "startsWith", "insert", "search"] [[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]] 输出 [null, null, true, false, true, null, true] 解释 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
提示:
1 <= word.length, prefix.length <= 2000
word
和prefix
仅由小写英文字母组成insert
、search
和startsWith
调用次数 总计 不超过3 * 104
次
方法:字典树
时间复杂度:初始化为O(1),其余操作为O(|S|),其中|S|是每次插入或查询的字符串的长度
空间复杂度:O(∣T∣⋅Σ),其中 ∣T∣为所有插入字符串的长度之和,Σ 为字符集的大小,本题 Σ=26。
1 var Trie = function () { 2 this.children = {}; 3 }; 4 5 /** 6 * @param {string} word 7 * @return {void} 8 */ 9 Trie.prototype.insert = function (word) { 10 let node = this.children; 11 for (const ch of word) { 12 if (!node[ch]) { 13 node[ch] = {}; 14 } 15 node = node[ch]; 16 } 17 node.isEnd = true; 18 }; 19 20 /** 21 * @param {string} word 22 * @return {boolean} 23 */ 24 Trie.prototype.searchPrefix = function (prefix) { 25 let node = this.children; 26 for (const ch of prefix) { 27 if (!node[ch]) { 28 return false; 29 } 30 node = node[ch]; 31 } 32 return node; 33 } 34 Trie.prototype.search = function (word) { 35 const node = this.searchPrefix(word); 36 return node !== undefined && node.isEnd !== undefined; 37 }; 38 39 /** 40 * @param {string} prefix 41 * @return {boolean} 42 */ 43 Trie.prototype.startsWith = function (prefix) { 44 return this.searchPrefix(prefix); 45 }; 46 47 /** 48 * Your Trie object will be instantiated and called as such: 49 * var obj = new Trie() 50 * obj.insert(word) 51 * var param_2 = obj.search(word) 52 * var param_3 = obj.startsWith(prefix) 53 */
标签:node,insert,search,word,前缀,Trie,208,prefix From: https://www.cnblogs.com/icyyyy/p/16879337.html