class Solution { public: vector wordSubsets(vector& A, vector& B) { int n = (int)A.size(); unordered_map freqMap[n]; for (int i = 0; i < n; i++) { for (int j = 0; j < (int)A[i].length(); j++) { freqMap[i][A[i][j]] ++; } } unordered_map maxFreqMap; for (string& s : B) { unordered_map freqMap; for (int i = 0; i < s.length(); i++) { freqMap[s[i]] ++; } for(auto entry : freqMap) { maxFreqMap[entry.first] = max(maxFreqMap[entry.first], entry.second); } } vector result; for(int i = 0; i < n; i++) { bool isUniversal = true; for(auto entry : maxFreqMap) { if(freqMap[i][entry.first] < entry.second) { isUniversal = false; break; } } if(isUniversal) { result.push_back(A[i]); } } return result; } };