JSFiddle - React, Tailwind, and code Playground
by jayakrishnancn
JavaScript
class Trie{
data = [] ;
end = false;
indices = []
insert(word, index){
let temp = this;
for(let i=0; i< word.length; i++){
let char = word[i];
if(!temp.data[char]){
temp.data[char] = new Trie();
}
temp = temp.data[char]
temp.indices.push(index)
}
temp.end = true;
}
find(word){
let temp = this;
for(let i=0; i< word.length; i++){
let char = word[i];
if(!temp.data[char]){
return null;
}
temp = temp.data[char]
}
return temp.indices;
}
}
class WordFilter {
suffixTrie = new Trie();
prefixTrie = new Trie();
constructor(words) {
for(let index=0; index< words.length; index++){
let word = words[index]
if(!word) continu
this.prefixTrie.insert(word, index);
const revWord = word.split("").reverse().join("");
this.suffixTrie.insert(revWord,index);
}
}
f(prefix, suffix){
let prefixItems = this.prefixTrie.find(prefix);
if(!prefixItems || prefixItems.length === 0) return -1;
let suffixRev = suffix.split("").reverse().join("")
let suffixitems = this.suffixTrie.find(suffixRev);
if(!suffixitems || suffixitems.length === 0) return -1;
let commonItems = prefixItems.filter( item =>suffixitems.includes(item) );
if(commonItems.length === 0){
return -1
}
let result = commonItems[0]
for(let item of commonItems){
if( item > result ){
result = item;
}
}
return result;
}
}
let words =...