字符串的完美度
题目详情:
我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同,
而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。
现在给定一个字符串,输出它的最大可能的完美度。
例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。
代码:
import java.util.Arrays;
/**
* @author huimin
* @apiNote
* 我们要给每个字母配一个1-26之间的整数,……求最大完美度
*/
public class Test {
public static void main(String[] args) {
String s = "Dad";
int mostPerfect = mostPerfect(s);
System.out.println(mostPerfect);// 77
}
public static int mostPerfect(String s){
// 声明存储各字母数量的数组
int[] ints = new int[26];
// 将字母统一转为小写
s = s.toLowerCase();
// 算数量
for (int i = 0; i < s.length(); i++) {
ints[s.charAt(i) - 97]++;
}
// 排序
Arrays.sort(ints);
// 求和
int sum = 0;
for (int i = 25; i >= 0; i--) {
sum += ints[i] != 0 ? ints[i] * (i+1) : 0;
}
return sum;
}