题目地址:链接
思路: 核心思路:使用 Map 模拟树
- insert:遍历 word ,如果当前检索字符不存在创建并将其指向当前节点,指向 生成\已存在 检索节点。
- search:遍历 word ,若遍历完毕,最后一节点存在 end 节点,说明当前节点存在,返回 true ,否则返回 false。
- startsWith: 遍历 word ,若遍历完毕返回 true,否则返回 false。
class Trie {
constructor() {
this.root = new Map();
}
insert(word) {
let root = this.root;
for(const s of word) {
if(!root.has(s)) root.set(s, new Map());
root = root.get(s);
}
if(!root.has('end')) root.set('end', '!');
}
search(word) {
let root = this.root;
for(const s of word) {
if(root.has(s)) root = root.get(s);
else return false;
}
return root.has('end') ? true : false;
}
startsWith(prefix) {
let root = this.root;
for(const s of prefix) {
if(root.has(s)) root = root.get(s);
else return false;
}
return true;
}
}
/**
* Your Trie object will be instantiated and called as such:
* var obj = new Trie()
* obj.insert(word)
* var param_2 = obj.search(word)
* var param_3 = obj.startsWith(prefix)
*/
8万+

被折叠的 条评论
为什么被折叠?



