https://leetcode.com/problems/naming-a-company/
是真的思维不够灵活么,为什么想不到。

个人解答

  1. class Solution:
  2. def distinctNames(self, a: List[str]) -> int:
  3. prefix = collections.defaultdict(set)
  4. for x in a:
  5. prefix[x[0]].add(x[1:])
  6. res = 0
  7. for x in prefix:
  8. for y in prefix:
  9. if x != y:
  10. l = len(prefix[x] & prefix[y])
  11. res += (len(prefix[x]) - l) * (len(prefix[y]) - l)
  12. return res

题目分析

这道题想到了prefix,suffix之类的解决思路,但是没抓住本质。
枚举的过程中如何能做到不重不漏是非常重要的。这道题中,参考:https://leetcode.com/problems/naming-a-company/discuss/2141038/Python-3-Explanation-with-pictures
很巧妙的把问题转化为set的求交,联和起来处理,完美做到了枚举。

自己之前总是分开计算suffix和prefix,结果无法做到不重不漏,这一道题值得自己好好思考下。