牛客华为机试-名字的漂亮度

题目描述

给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
Input:
整数N,后续N个名字
Output:
每个名称可能的最大漂亮程度
Sample Input:

2
zhangsan
lisi 

Sample Output:

192
101

思路

将输入数据去重,并记录出现的次数,次数最多的记为26,其次记为25……,最大漂亮度为次数和单个字符漂亮度乘积的和

代码实现

while True:                                 #处理多组输入
    try:
        n = int(input().strip())            #接收待处理的数据个数
        if not n:break                       
        for i in range(n):                  #接收每个待处理的字符串
            s = input().strip().lower()     
            if not s.isalpha():break        #输入不是字母为非法输入
            l = []                          
            res = 0
            for i in list(set(s)):          #记录字母出现次数
                l.append(s.count(i))
            l = sorted(l,reverse=True)      #将字母出现次数从大到小排序
            for i in range(len(l)):         #计算最大漂亮度
                res += l[i]*(26-i)            
            print(res)
    except:
        break