6094. 公司命名(是真难)

image.png

  1. class Solution {
  2. public:
  3. long long distinctNames(vector<string>& ideas) {
  4. unordered_map<string, int> m;
  5. for(auto& w : ideas) {
  6. m[w.substr(1)] |= (1 << (w[0] - 'a'));
  7. }
  8. int cnt[26][26];
  9. memset(cnt, 0, sizeof(cnt));//互补的思想
  10. for(auto& w : ideas) {
  11. auto mask = m[w.substr(1)];
  12. for(char c = 'a'; c <= 'z'; ++c) {
  13. if(!(mask & (1 << (c - 'a')))) {//如果里面没有c
  14. cnt[w[0]-'a'][c-'a']++;//有w[0]但是没有c
  15. }
  16. }
  17. }
  18. long long res = 0;
  19. for(auto& w : ideas) {
  20. auto mask = m[w.substr(1)];
  21. for(char c = 'a'; c <= 'z'; ++c) {
  22. if(!(mask & (1 << (c - 'a')))) {
  23. res += cnt[c-'a'][w[0]-'a'];//不同组,没有w[0]但是要有c
  24. }
  25. }
  26. }
  27. return res;
  28. }
  29. };