Notes-04-03-Hard-interview-question
To sharpen your mind
3 Hard interview white board
Auto completion
class Node{
constructor(value, children){
this.value = value;
this.children = children || {};
}
addChild(node){
this.children[node.value] = node;
}
}
class Solve{
constructor(data){
this.trie = this.build(data);
}
rebuild(data){
this.trie = this.build(data);
}
// Snippet build trie
build(data){
const root = new Node('');
for(let word of data){
let nodeItr = root;
for(let letter of word){
if(!nodeItr.children[letter]){
nodeItr.children[letter] = new Node(letter);
}
nodeItr = nodeItr.children[letter]
}
nodeItr.children['EOF'] = new Node('EOF');
}
return root;
}
getMatch(prefix, selfIncluded){
let nodeItr = this.trie;
let res = [];
// Snippet: Traverse trie
for(let letter of prefix){
if(!nodeItr.children[letter]){
return res;
}
nodeItr = nodeItr.children[letter];
}
res = this.getChildren(nodeItr).map(child => prefix + child.substr(1))
if(!selfIncluded){
res = res.filter(s => s !== prefix);
}
return res;
}
// Snippet recursion
getChildren(node){
// End Condition
if(node.value === 'EOF'){
return [''];
}
// Do recurrsion
const children = Object.keys(node.children).reduce((acc, key) => {
return acc.concat(this.getChildren(node.children[key]));
}, []);
return children.map(child => node.value + child);
}
}
// Tests
pb = new Solve(["do","dod","dog",'dark',"apple","dodge","door","doddle"]);
pb.getMatch('do');
pb.getMatch('dod');
pb.getMatch('dod', true);K-th largest Number
Check if string concatable from list of words
Last updated