
class Solution {public: long long distinctNames(vector<string>& ideas) { unordered_map<string, int> m; for(auto& w : ideas) { m[w.substr(1)] |= (1 << (w[0] - 'a')); } int cnt[26][26]; memset(cnt, 0, sizeof(cnt));//互补的思想 for(auto& w : ideas) { auto mask = m[w.substr(1)]; for(char c = 'a'; c <= 'z'; ++c) { if(!(mask & (1 << (c - 'a')))) {//如果里面没有c cnt[w[0]-'a'][c-'a']++;//有w[0]但是没有c } } } long long res = 0; for(auto& w : ideas) { auto mask = m[w.substr(1)]; for(char c = 'a'; c <= 'z'; ++c) { if(!(mask & (1 << (c - 'a')))) { res += cnt[c-'a'][w[0]-'a'];//不同组,没有w[0]但是要有c } } } return res; }};