class Solution:
def distinctNames(self, ideas: List[str]) -> int:
ans = set()
seen = set(ideas)
starts = collections.defaultdict(list)
# 预处理出 starts 字典
for idea in ideas:
starts[idea[0]].append(idea[1:])
for idea in ideas:
for i in range(26):
ch = chr(i + 97)
if idea[0] != ch:
a = ch + idea[1:]
if a not in seen:
# 枚举后缀
for b in starts[ch]:
if idea[0] + b not in seen:
ans.add((a, idea[0] + b))
return len(ans)
class Solution:
def distinctNames(self, ideas: List[str]) -> int:
ans = 0
seen = set(ideas)
starts = collections.defaultdict(set)
for idea in ideas:
starts[idea[0]].add(idea[1:])
for j in range(25):
for i in range(j + 1, 26):
set_x = starts[chr(i + 97)]
set_y = starts[chr(j + 97)]
intersections = len(set_x & set_y) # 交集
ans += 2 * (len(set_x) - intersections) * (len(set_y) - intersections)
return ans