Python DP Simple Solution with 3 Lines
\nclass Solution:\n    def findAllConcatenatedWordsInADict(self, words: List[str]) -> List[str]:\n        s = set(words)\n        \n        memo = {}\n        d
```\nclass Solution:\n    def findAllConcatenatedWordsInADict(self, words: List[str]) -> List[str]:\n        s = set(words)\n        \n        memo = {}\n        def isConcatenatedWord(w):\n            if w in memo: return memo[w]\n            \n            for i in range(1, len(w)):\n                if w[:i] not in s: continue\n                \n                r = w[i:]\n                if r in s or isConcatenatedWord(r):\n                    memo[w] = True\n                    return True\n                \n            memo[w] = False\n            return False\n        \n        return filter(isConcatenatedWord, words)\n```\n\n3 lines Solution :P\n```\nclass Solution:\n    def findAllConcatenatedWordsInADict(self, words: List[str]) -> List[str]:\n        s, m = set(words), {}\n        dp = lambda w: m[w] if w in m else any(w[:i] in s and (w[i:] in s or dp(w[i:])) for i in range(1, len(w)))\n        return filter(dp, words)\n```
['Dynamic Programming', 'Python3']