描述 | |
---|---|
知识点 | 字符串 |
运行时间限制 | 0M |
内存限制 | 0 |
输入 | 整数N,后续N个名字 N个字符串,每个表示一个名字 |
输出 | 每个名称可能的最大漂亮程度 |
样例输入 | 2 zhangsan lisi |
样例输出 | 192 101 |
/*定义一个函数,算出一个名字的得分,然后遍历每个名字,分别得出它们的得分
* */
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] input = new String[n];
for (int i = 0; i < n; i++)
input[i] = sc.next();
sc.close();
for (int i = 0; i < input.length; i++)
System.out.println(score(input[i]));
}
private static int score(String name) {
name = name.toUpperCase(); // 由于忽略大小写,就全部把他们转换成大写处理
int sum = 0;
int temp = 0;
// 使用一个map,分别用key和value存储名字中出现的字母和次数
Map<Character, Integer> map = new TreeMap<Character, Integer>();
for (int i = 0; i < name.length(); i++) {
if (map.containsKey(name.charAt(i))) {
map.put(name.charAt(i), map.get(name.charAt(i)) + 1);// 如果之前出现过,那么value值加一
} else {
map.put(name.charAt(i), 1); // 之前没有出现过,则存储
}
}
Collection<Integer> list = map.values(); //将value值用集合存储起来
Iterator<Integer> iterator = list.iterator();
List<Integer> linklist = new LinkedList<>(); //由于Collection中没有sort()方法,定义一个List
while (iterator.hasNext())
linklist.add(iterator.next()); //将value值全部存到list中
Collections.sort(linklist); //调用Collections中的sort()方法进行排序
int size = linklist.size();
for (int i = 0; i < size; i++) {
temp = (26 - i) * linklist.get(size - 1 - i); //大的值在后面,所以从后往前相乘
sum += temp;
}
return sum;
}
}