题解 | #名字的漂亮度#
名字的漂亮度
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))
