Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- void dfs(int x,int y,vector<int> &val )
- {
- // cout<<x<<" "<<y<<endl;
- if(val[x] or x==0)
- return;
- val[x]=y;
- for(int i=0;i<20;i++)
- if(x&(1<<i))
- dfs(x-(1ll<<i),y,val);
- }
- vector<int> solve(int N, vector<string> &S, int Q, vector<string> &Query) {
- // code here
- vector<int> val(1500000);
- val[0]=1;
- for (int i = 0; i < N; i++)
- {
- int m = S[i].length(), ans = 0;
- vector<bool> cnt(20);
- for (int j = 0; j < m; j++)
- {
- if (cnt[S[i][j] - 'a'] == 0)
- {
- cnt[S[i][j] - 'a'] = true;;
- }
- }
- for (int j = 0; j < 20; j++)
- {
- if (cnt[j])
- ans+=(1ll<<j);
- }
- if(val[ans]==0)
- dfs(ans, i + 1,val);
- }
- vector<int> ans1;
- for(int i=0;i<Q;i++)
- {
- int ans=0;
- int m=Query[i].size();
- for(int j=0;j<m;j++)
- {
- ans+=(1<<(Query[i][j]-'a'));
- }
- ans1.push_back(val[ans]-1);
- }
- return ans1;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment