我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同, 而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。 现在给定一个字符串,输出它的最大可能的完美度。 例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。 java public static int perfect(String s);下面是我写的方法,不知道哪里错了,跪求指点public class Test { public static void main(String[] args) {
String str = "dda";
System.out.println(perfect(str));
} public static int[][] sortArray(int[][] sortArray) {
int[][] array = sortArray;
int length = array.length;
int value = 0;
for (int i = 0; i < length; i++) {
for (int j = 0; j < length - i - 1; j++) {
if (array[j][0] < array[j + 1][0]) {
value = array[j][0];
array[j][0] = array[j + 1][0];
array[j + 1][0] = value;
}
}
}
return array;
} public static int perfect(String s) {
String str = s.toLowerCase();
int result = 0;
int length = str.length();
int[][] str_info = new int[26][1];
int[] assign_value = new int[length];
for (int i = 0; i < length; i++) {
char letter = str.charAt(i);
if(((int)letter>=97)&&((int)letter<=122)){
int num = (int) (letter - 97);
str_info[num][0]++;
}
assign_value[i] = (26 - i);
}
sortArray(str_info);
for (int i = 0; i < length; i++) {
if(str_info[i][0]!=0){
result += str_info[i][0] * assign_value[i];
}
}
return result;
}}
StringJava

解决方案 »

  1.   

    http://hero.pongo.cn/Question/Details?ID=71&ExamID=69
    这个是网上那道题的地址,老纠结了~
      

  2.   

    没仔细看代码,但是跑了两把都是OK的,
    LZ给个错误的输入看看呢
      

  3.   

    初始化数组长度26,每个数字代表一个字母出现次数,可以用小写字母ascii减'a'的ascii作为下标,
    遍历字符串,
    数组由大到小排序,
    遍历数组,从大到小分别乘26到1,最后求和。