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 =...