1 #define _for(i,a,b) for(int i = (a);i < b;i ++) 2 #define _rep(i,a,b) for(int i = (a);i > b;i --) 3 class Solution 4 { 5 public: 6 vector<int> findNumOfValidWords(vector<string>& words, vector<string>& puzzles) 7 { 8 map<int,int> m; 9 _for(i,0,words.size()) 10 { 11 int st = 0; 12 int cnt = 0; 13 _for(j,0,words[i].size()) 14 st |= 1<<words[i][j]-'a'; 15 m[st] ++; 16 } 17 vector<int> vV; 18 19 _for(i,0,puzzles.size()) 20 { 21 int sup = 0; 22 int rnt = 0; 23 _for(j,0,puzzles[i].size()) 24 sup |= 1<<puzzles[i][j]-'a'; 25 int sub = sup; 26 do 27 { 28 if((sub & (1<<puzzles[i][0]-'a'))) 29 rnt += m[sub]; 30 sub = (sub-1) & sup; 31 } 32 while(sub != sup); // 处理完之后 会有 -1&sup = sup 33 vV.push_back(rnt); 34 } 35 return vV; 36 } 37 };