Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- void dfs(vector<int> &pos, int val, int v){
- if(pos[v] <= val)
- return;
- pos[v] = val;
- for(int i = 0; i < 21; ++i){
- if(((v >> i) & 1) == 0)
- continue;
- int child = v ^ (1 << i);
- if(pos[child] <= val)
- continue;
- dfs(pos, val, child);
- }
- }
- public:
- vector<int> solve(int n, vector<string> &s, int Q, vector<string> &q){
- vector<int> ans;
- for(int i = 0; i < n; ++i){
- sort(s[i].begin(), s[i].end());
- auto it = unique(s[i].begin(), s[i].end());
- s[i].resize(it - s[i].begin());
- }
- for(int i = 0; i < Q; ++i){
- sort(q[i].begin(), q[i].end());
- }
- int N = (1 << 22) - 1;
- vector<bool> vis(N + 1, 0);
- vector<int> pos(N + 1, n + 1);
- for(int i = 0; i < n; ++i){
- int num = 0;
- for(int j = 0; j < s[i].size(); ++j){
- num += (1 << (s[i][j] - 'a'));
- }
- dfs(pos, i, num);
- }
- for(int i = 0; i < Q; ++i){
- int num = 0;
- for(int j = 0; j < q[i].size(); ++j){
- num += (1 << (q[i][j] - 'a'));
- }
- if(pos[num] == n + 1)
- ans.push_back(-1);
- else
- ans.push_back(pos[num]);
- }
- return ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment