✅ [C++]Easy solution with explanation ✅
Intuition\nYou don\'t need to find all the words you just need to check whether the words are made or not , so simply check for the word form (i to j) and then 
# Intuition\nYou don\'t need to find all the words you just need to check whether the words are made or not , so simply check for the word form (i to j) and then call the check for j + 1;\n\n# Approach\nWhat Function findWord is doing ?\nIt makes a word from i till j where there is word , \neg : [cat , catanddog , and , dog]\nAt catanddog\nc -> not found\n     ca -> not found\n     cat call for(anddog)-> found then it checks whether there exist a word from after cat and calls for it and before that it increses the count for word and if not found then it decrements the word count.\n\nSimilarly it\'ll check for all the words and call for the next part of the string and check for words in it.\n\n# Complexity\n- Time Complexity : O(words.size() + (words[i].size() * log(words[i].size()))\n\n- Space Complexity : O(words.size())\n# Code\n```\nclass Solution {\npublic:\n    bool findWord(set<string>& mp , int i , string & str , int &cnt){\n        if(i >= str.size() ){\n            return true;\n        }\n        string temp = "";\n        for(int j = i ; j < str.size() ; j++){\n            temp += str[j];\n            if(mp.find(temp) != mp.end()){\n                //cout<<temp<<" : sub\\n";\n                cnt++;\n                if(findWord(mp , j + 1 , str , cnt)){\n                    return true;\n                }\n                cnt--;\n            }\n        }\n        return false;\n    }\n    vector<string> findAllConcatenatedWordsInADict(vector<string>& wd) {\n        int n = wd.size();\n        set<string> words;\n        vector<string> ans;\n        for(auto it : wd){\n            words.insert(it);\n        }\n        int cnt = 0;\n        for(int i = 0 ; i < n ; i++){\n            string str = wd[i];\n            int cnt = 0;\n            if(findWord(words , 0 , str , cnt) && cnt >= 2){\n                ans.push_back(str);\n            }\n        }\n        return ans;\n    }\n};\n```
['Dynamic Programming', 'Depth-First Search', 'C++']