这就是我想要做的:"book" => {b:{o:{o:k:{'end':true}
有人可以向我解释/为此链接一个解释吗?
const ENDS_HERE = '__ENDS_HERE'
class Trie {
constructor() {
this.node = {};
}
insert(word){
let trie = this.node;
console.log( 'start inset', trie )
for ( let index in word ) {
let char = word[index];
if ( !trie[char] ) {
trie[char]= {}
}
console.log( trie )
trie = trie[char]
}
trie[ENDS_HERE] = true
}
}
let test= new Trie
test.insert('book')
test.insert('baak')
这是它记录的内容:
start inset {}
{ b: {} }
{ o: {} }
{ o: {} }
{ k: {} }
start inset { b: { o: { o: [Object] } } }
{ b: { o: { o: [Object] } } }
{ o: { o: { k: [Object] } }, a: {} }
{ a: {} }
{ k: {} }
在此行trie = trie[char]
上,将特里树重设为{}
。
插入功能的最后一行,然后设置{ '__ENDS_HERE' = true}
但是,在调用test.insert('baak')
时,您会看到trie === { b: { o: { o: [Object] } } }
。
我的问题是它如何构建{b:{o:{o:k:{'end':true}
?
相同的结果发生在python中。上面的代码是用JavaScript编写的。
答案 0 :(得分:1)
从内到外构造嵌套字典的更简单解决方案
s = 'book'
s = list(s)
s.append('end')
d = {}
for key in reversed(s):
if key == 'end':
d = {key: True}
else:
d = {key: d}
# {'b': {'o': {'o': {'k': {'end': True}}}}}
答案 1 :(得分:0)
尝试此功能
insert(word) {
const finalObj = {};
let currentObj = finalObj;
word.split('').forEach((char, i) => {
if (i === 0) {
finalObj[char] = {};
currentObj = finalObj[char];
} else {
currentObj[char] = {};
currentObj = currentObj[char];
}
});
currentObj.end = true;
return finalObj;
}