1.简述:

描述

给出一个名字,该名字有26个字符组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。

每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。

给出多个名字,计算每个名字最大可能的“漂亮度”。

本题含有多组数据。

数据范围:输入的名字长度满足 1 \le n \le 10000 \1≤n≤10000 

输入描述:

整数N,后续N个名字

输出描述:

每个名称可能的最大漂亮程度

示例1

输入:

2
zhangsan
lisi

复制输出:

192
101

2.代码实现:

思路:

对字符串进行桶排序,我们只需要知道不同字符出现的次数,甚至都不需要知道次数对应的是什么字符;​然后再将次数降序排列,依次乘以当前还可以用的最高分值再加入总分值

import java.io.*;
import java.util.*;

public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
while ((s = br.readLine()) != null) {
int[] counter = new int[26];
for(char c: s.toCharArray()) {
counter[c-'a']++;
}
List<Integer> list = new ArrayList<>();
for(int n: counter) {
if (n > 0) {
list.add(n);
}
}
list.sort(new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
return i2.intValue() - i1.intValue();
}
});
int point = 26, sum = 0;
for(int i = 0; i < list.size(); i++) {
sum += (point - i) * list.get(i).intValue();
}
System.out.println(sum);
}
br.close();
}
}