总决式

本题用到了贪心算法,根据局部找最优解。

破题式:-需求分析

输入:两种输入类型:

  1. 第一行的数字:代表后面有几个名字要计算
  2. 第二种输入:代表后边计算的名字

输出:依次计算输出名字的‘漂亮度’

破阵式:-拆解需求

  1. 封装一个计算任意名字‘漂亮度’的函数,
  2. 入参:单个名字
  3. 返回值:该名字的"漂亮度“
  4. 循环调用函数,循环次数就是第一行的数字

破气式:-思路打法

难点式计算漂亮度。

名字的字母为字典的键名,字母的出现次数为字典的键值。

例如:zhangsan →{'z': 1, 'h': 1, 'a': 2, 'n': 2, 'g': 1, 's': 1}

但后对字典进行按照值排序的对象→对该对象进行遍历,然后计算漂亮总和

独孤九剑 -上代码

def pretty_num(name):
    """
    封装计算名字的’漂亮度‘
    :param name: 名字
    :return: 名字的漂亮度
    """
    d = {}   # 赋值空字典,保存名字中字母和出现次数
    l=[]     # 赋值空列表,对名字元素是否从重复,进行判断
    for i in name: # 遍历名字的字符串
        if i in l: # 判断是否重复
            d[i] += 1  # 如果重复,对应字母的次数加 1
        else:
            d[i] = 1   # 如果不重复,对应字母和次数1 加入字典
            l.append(i)  # 把这个字母加入列表,后面校验其是否重复
    # 开始计算’漂亮度‘
    pretty = 0  # 初始化 漂亮度
    m = 26      # 贪心算法 开始计算
    for i in sorted(d.values(), reverse=True):   # 对字典的值进行从大到小排序
        pretty += i * m        # 累加:该字母的漂亮度,出现次数*漂亮值
        m -= 1                 # 漂亮值累减
    return pretty


a = int(input())

for i in range(a):
    print(pretty_num(input()))