having been troubled by this for a long time....   here is my pretty short java code beats 78%   quite easy  no comlicated data structure
```\npublic List findAllConcatenatedWordsInADict(String[] words) {\n        List list = new ArrayList<>();\n        Set dictionary = new HashSet<>();\n        f
```\npublic List<String> findAllConcatenatedWordsInADict(String[] words) {\n        List<String> list = new ArrayList<>();\n        Set<String> dictionary = new HashSet<>();\n        for(String string : words) dictionary.add(string);\n        for(String word:words) {\n            dictionary.remove(word);\n            if(check(word,dictionary)) list.add(word);\n            dictionary.add(word);\n        }\n        return list;\n    }\n    \n    private boolean check(String word,Set<String> dictionary) {\n        if(dictionary.contains(word)) return true;\n        int i = word.length() - 1;\n        while(i >= 1) {\n            if(dictionary.contains(word.substring(0,i)) && check(word.substring(i),dictionary)) return true;\n            i--;\n        }\n        return false;\n    }
[]