题解 | #名字的漂亮度#
名字的漂亮度
https://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3
思路就是先把名字里字母次数对应起来,得到一个字典,
然后再把同样出现次数和对应的字母组成字典 ,接下来
就是等差数列的求和问题了
from collections import defaultdict n = int(input()) names = [] for _ in range(n): names.append(input()) for n in names: counter = defaultdict(lambda:0) group = defaultdict(list) for i in n: counter[i]+=1 for c in list(counter.items()): group[c[1]].append(c[0]) #截止到这里,得到了一个按字母出现次数从大到小排列的 #{次数:[字母列表]}这样的字典 assist = list(group.items()) assist.sort(key=lambda x:-x[0]) beauty = 0 s = 26 for i in assist: beauty+=i[0]*(s+s-len(i[1])+1)*len(i[1])/2 s-=len(i[1]) print(int(beauty))