//给出一个字符串,该字符串仅由小写字母组成, // 定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。 //每个字母都有一个“漂亮度”,范围在1到26之间。 // 没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。 //给出多个字符串,计算每个字符串最大可能的“漂亮度”。 //1≤n≤1000 , //1≤mi≤2000 // 1<=xi<=10 //输入:2 //zhangsan //lisi //输出:192 //101 //说明: //对于样例lisi,让i的漂亮度为26,l的漂亮度为25, // s的漂亮度为24,lisi的漂亮度为25+26+24+26=101.
import java.util.Arrays;
import java.util.Scanner;
public class Demo45 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n=in.nextInt();//字符串数量
String []srr=new String[n];//String数组
for (int i = 0; i < n; i++) {
srr[i]=in.next();//String数据存放
}
for(int i=0;i<n;i++){//遍历字符串
String str=srr[i];
//英文小写字母在ascii码0-127
int s[]=new int[128];
for(int j=0;j<str.length();j++){
s[str.charAt(j)]++;//统计这个字母出现的次数,放在s这个数组里
}
Arrays.sort(s);//从小到大排序
int mul=26,sum=0;
for(int j=s.length-1;j>=0&&s[j]>0;j--){//数组s末位就是最多的开始计算
sum+=s[j]*mul;
mul--;
}
System.out.println(sum);
}
}
}
}
最后分享一个大神最快的方法
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;
public class Demo4502 {
public static void main(String[] args) throws IOException {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String value;
while((value=bf.readLine())!=null){
int num=Integer.parseInt(value);
for(int index=0;index<num;index++){
//处理其中一组数据的逻辑
String name=bf.readLine();
char[] nameChars=name.toCharArray();
int[] charMaxs=new int[150];
for(int inda=0;inda<nameChars.length;inda++){
charMaxs[(int)nameChars[inda]]++;
}
Arrays.sort(charMaxs);
int max=26;
int total=0;
for(int indb=charMaxs.length-1;indb>=0;indb--){
if(charMaxs[indb]==0)//0就遍历结束了
break;
total=total+charMaxs[indb]*max;
max--;
}
System.out.println(total);
}
}
}
}
答题思路差不多,用输入流更快