JAVA || HashSet || EFFICIENT APPOACH || LEARNER FRIENDLY || RECURSION
\nclass Solution {\n    public List<String> findAllConcatenatedWordsInADict(String[] words) {\n        List<String> result = new ArrayList<>();\n        \n     
```\nclass Solution {\n    public List<String> findAllConcatenatedWordsInADict(String[] words) {\n        List<String> result = new ArrayList<>();\n        \n        Set<String> dict = new HashSet<>(Arrays.asList(words));\n        \n        for (String word : words) {\n            if(form(word, dict)) {\n            result.add(word);\n            }\n        }\n        return result ;\n    }\n    \n    public boolean form(String word, Set<String> dict) {\n        for (int i=1; i<word.length(); i++) {\n            String left = word.substring(0, i) ;\n            String right = word.substring(i) ;\n\n            if(dict.contains(left)) {\n                if(dict.contains(right) || form(right, dict)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n}\n```\n\n
['Recursion', 'Java']