JSFiddle - React, Tailwind, and code Playground
by LyndseyB
Babel + JSX
const Module = (() => {
const Trie = {
a: {
r: {
t: {
$: 1,
s: {
$: 1,
y: {
$: 1
}
},
y: {
$: 1
}
},
m: {
$: 1,
s: {
$: 1
},
y: {
$: 1
}
}
},
y: {
s: {
$: 1
}
}
}
};
const recurseSuffix = (suffix, nodes, currentWord = '', wordList = [], suffixArray = null, isSuffix = false) => {
if(suffixArray === null) {
suffixArray = suffix.split('');
}
for(const node in nodes) {
if(node === '$' && isSuffix) {
wordList.push(currentWord);
sufifixArray = suffix.split('');
}
if(node === suffixArray[0]) {
isSuffix = true;
suffixArray.shift();
recurseSuffix(suffix, nodes[node], currentWord + node, wordList, suffixArray, isSuffix);
}
}
return wordList;
};
const suffixSearch = (suffix, trie = Trie) => {
const wordList = recurseSuffix(suffix, trie);
return wordList;
};
return { suffixSearch };
}());
// artsy, arty, army
console.time('suffixSearch');
const suffixes = Module.suffixSearch('y');
console.timeEnd('suffixSearch');
console.log(suffixes);