题目描述:
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
Java实现:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = Integer.parseInt(sc.nextLine());
for (int i = 0; i < n; i++) {
String name = sc.nextLine();
System.out.println(beauty(name));
}
}
}
private static int beauty(String name) {
char[] chars = new char[name.length()];
int[] count = new int[26];
int sum = 0;
for (int i = 0; i < name.length(); i++) {
chars[i] = Character.toLowerCase(name.charAt(i));
count[chars[i]-97]++;
}
Arrays.sort(count);
int j = 25;
while (j >= 0 && count[j] != 0) {
sum += (j+1)*count[j];
j--;
}
return sum;
}
}
知识点:
- 'a'的ASCII码值为97
- 用一个长度26的数组记录可能出现的26个字符的个数
- 排好序后不必考虑具体是哪个字符,个数最多的漂亮度为26