100% faster  0ms C++ solution with explanation
we need to consider alphabets to be set bits in an integer\n if a word contains \'a\' then first bit would be set ....001 similarly if a word contains both \'a\
* we need to consider alphabets to be set bits in an integer\n* if a word contains \'a\' then first bit would be set ....001 similarly if a word contains both \'a\' and \'b\' then the integer would be .....011\n* so I pushed all the integers formed in the vector v\n* recursively checking whether I can include that particular integer\n* so if all the bits are different in two integers then **(a^b == a|b)** so we can include that else proceed to next number\n```\nvector<int>v;\nint n;\nint ans;\nvoid check(int ind,int cur)\n{\n    if(ind==n)\n    {\n        return ;\n    }\n    if((cur^v[ind])==(cur|v[ind]))\n    {\n        // cout<<"hi";\n        ans = max(ans,__builtin_popcount(cur|v[ind]));\n        check(ind+1,cur|v[ind]);\n    }\n    check(ind+1,cur);\n}\nclass Solution {\npublic:\n    int maxLength(vector<string>& arr) {\n        v = {};\n        ans = 0;\n        for(int i=0;i<arr.size();i++)\n        {\n            int cur = 0;\n            for(int j=0;j<arr[i].size();j++)\n            {\n                if((cur>>(arr[i][j]-\'a\'))&1)\n                {\n                    cur=0;\n                    break;\n                }\n                else\n                {\n                    cur = cur|(1<<(arr[i][j]-\'a\'));\n                }\n            }\n            if(cur)\n            {\n                // cout<<cur<<" ";\n                v.push_back(cur);\n            }\n        }\n        n = v.size();\n        if(n==0)\n        {\n            return 0;\n        }\n        check(0,0);\n        \n        // cout<<"here"<<(133&131072);\n        return ans;\n    }\n};\n```
['Bit Manipulation', 'Depth-First Search', 'Recursion', 'C']