Simple solution. Javascript Beats 90% with explanation
\n1. Use a set for quick lookup\n2. Call isConcat on each word.  If a word\'s prefix is in the dictionary, see if the suffix can also be concatenated.\n3. You c
\n1. Use a set for quick lookup\n2. Call isConcat on each word.  If a word\'s prefix is in the dictionary, see if the suffix can also be concatenated.\n3. You can use the dictionary as a memo, when you find a word that can be made via concatenation, you can store it in the dictionary\n4. When you loop through the words, remember to delete and add the word from the set before and after the isConcat call\n\n```\nlet findAllConcatenatedWordsInADict = (words) => {\n    const dict = new Set(words);\n    const isConcat = (word) => {\n        if(dict.has(word)) return true;\n        for(let i = 0; i < word.length; i++){\n            let prefix = word.slice(0,i+1);\n            if(dict.has(prefix)){\n                let suffix = word.slice(i+1);\n                let result = isConcat(suffix);\n                if(result){\n                    dict.add(word);\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n    const results = [];\n    for(const word of words){\n        dict.delete(word);\n        if(isConcat(word)) results.push(word);\n        dict.add(word);\n    }\n    return results;\n};\n```
['Depth-First Search', 'Recursion', 'JavaScript']