题解 | #名字的漂亮度#

名字的漂亮度

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))


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务