✅ C++ || ✅ Explained || ✅ Simple approach ||🚀 EASY RECURSION || Using SET
PLZ UPVOTE\n\n\n# Code\n\nclass Solution {\npublic:\n\n    //Our lc function breaks the word into two parts left and right\n    // and check if these are alread
# PLZ UPVOTE\n![Cute-Cat.jpg](https://assets.leetcode.com/users/images/0ce2ad99-bff2-48e8-88ba-c5a513488ffc_1674801341.2756007.jpeg)\n\n# Code\n```\nclass Solution {\npublic:\n\n    //Our lc function breaks the word into two parts left and right\n    // and check if these are already present in our dictionary \n    //or can be formed using the words presnt in dictionary\n\n    bool lc(string s , set<string>&dictionary){\n\n        for(int i=1; i<s.size(); ++i){\n\n            string left=s.substr(0,i);\n            string right=s.substr(i);\n            \n            //iterators for the string to check their presence\n            auto ii=dictionary.find(left);\n            auto j=dictionary.find(right);\n            \n            // if left is found then right is also found \n            //or our right can be made\n\n            if(ii!=dictionary.end()){\n                if(j!=dictionary.end() or lc(right,dictionary)) return true;\n            }\n        }\n\n        return false;\n    }\n    vector<string> findAllConcatenatedWordsInADict(vector<string>& words) {\n        \n        //Made for storing the answer\n        vector<string> beri;\n\n        //Making a set of the string (dictionary) for all the words \n        set<string> dictionary;\n        for(auto i:words) dictionary.insert(i);\n        \n        //we are checking if the particular word can be made\n        // from other words presnt inside the dictionary\n        for(auto i :words){\n            if(lc(i,dictionary)) beri.push_back(i);\n        }\n\n        return beri;\n    }\n};\n```\n
['Array', 'String', 'Recursion', 'Ordered Set', 'C++']