3
vector<int> findNumOfValidWords(vector<string> &words, vector<string> &puzzles) {4
unordered_map<int, int> maskCnt;5
for (const auto &w : words) ++maskCnt[bitmask(w)];6
vector<int> ans(puzzles.size(), 0);7
for (int i = 0; i < puzzles.size(); i++) {8
int mask, subMask = mask = bitmask(puzzles[i]), first = bitmask(puzzles[i].substr(0, 1));10
if ((first & subMask) == first && maskCnt.count(subMask)) ans[i] += maskCnt[subMask]; // ok11
} while (subMask = (subMask - 1) & mask);17
int bitmask(const string &word, int mask = 0) {18
for (auto c : word) mask |= (1 << (c - 'a'));