import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = Integer.parseInt(in.nextLine());
List<String> names = new ArrayList<>();
for (int i = 0; i < n; i++) {
names.add(in.nextLine());
}
for (String name : names) {
System.out.println(CalBeauty(name));
}
}
public static int CalBeauty(String name) {
int[] charNum = new int[26];
for (int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
charNum[c - 'a']++;
}
Arrays.sort(charNum);
int beauty = 0;
for (int i = 26; i > 0; i--) {
int n = charNum[i - 1];
if (n == 0) {
//快速结束.
break;
}
beauty += i * n;
}
return beauty;
}
}
还有这么简单的贪心题目!
类似哈夫曼编码思想,把出现最多的字母赋最大的漂亮值,把出现次最多的字母赋次最大的漂亮值,直到26个字母都分配完毕~

京公网安备 11010502036488号