题目详情


我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同,

而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。


现在给定一个字符串,输出它的最大可能的完美度。

例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。


public class perfect {
/*
在数组per[0-25]中存放的是a-z出现的次数
然后对per 进行排序 保证per[0]中的数字最大
最后per[0]*26+per[1]*25....
*/
public static void main(String[] per) {
String s = new String("JKazTQMw ");
int a = perfect(s);
System.out.println(a);

}
public static int perfect(String s) {
int[] per = new int[26];
int k = 0;
for (int i = 0; i < s.length() ; i++ ) {
k = cal((int)s.charAt(i));
per[k]++;
}

for (int i = 0; i < per.length ; i++ )
System.out.print(per[i] + " ");

System.out.println("");
per = sort(per);

for (int i = 0; i < per.length ; i++ )
System.out.print(per[i] + " ");
System.out.println("");

int sum = 0;
k = 0;
while (k < 26 && per[k] != 0) {
sum += per[k] * (26 - k);
k++;
}

return sum;
}

//将a放在per[0]
public static int cal (int a) {
if (a >= 65 && a <= 90)
return a - 65;
if (a >= 97 && a <= 122)
return a - 97;
return 0;
}

//冒泡排序 保证最大的数字在数组的起点
public static int[] sort(int[] per) {
int temp = 0;
for (int i = per.length - 1; i >= 0; i--)
for (int j = i - 1; j >= 0; j--)
if (per[i] > per[j]) {
temp = per[i];
per[i] = per[j];
per[j] = temp;
}
return per;

}

}