Number of Valid Words for Each Puzzle LeetCode solution in C++

1
class Solution {
2
public:
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));
9
do {
10
if ((first & subMask) == first && maskCnt.count(subMask)) ans[i] += maskCnt[subMask]; // ok
11
} while (subMask = (subMask - 1) & mask);
12
}
13
return ans;
14
}
15

16
private:
17
int bitmask(const string &word, int mask = 0) {
18
for (auto c : word) mask |= (1 << (c - 'a'));
19
return mask;
20
}
21
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0