
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;
}
};