题目描述:
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
输入描述:
整数N,后续N个名字
输出描述:
每个名称可能的最大漂亮程度
思路:
将字母出现的顺序递减排列,分别乘以26、25、24……
import java.util.Arrays;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext())
{
int n = scanner.nextInt();
String[] names = new String[n];
for (int i = 0; i < n; i++)
names[i] = scanner.next();
for (String s: names)
System.out.println(help(s));
}
}
public static int help(String s)
{
int[] bucket = new int[26];
for (char c: s.toCharArray())
{
char cTmp = Character.toLowerCase(c);
bucket[c - 'a']++;
}
Arrays.sort(bucket);
int i = bucket.length - 1;
int res = 0;
while (i >= 0 && bucket[i] != 0)
{
res += (i + 1) * bucket[i];
i--;
}
return res;
}
}