题解 | #名字的漂亮度#
名字的漂亮度
http://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3
名字的漂亮度.其实就是 按字母出现的次数依次用 26 25 24等从大到小相加;
需要考虑有重复字母的情况,则重复最多的字母次数26 + 第2多25等从大到小
所以,定义一个数组,下标值用字母的ASCII码值表示, 默认值都是0, 出现了这个字母,那根据ASCII去放到对应的位置,此时值+1; 若出现重复的,值++;
最后对数组排序,从最高次数依次与26 25 等相乘再相加为最终值
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
for(int i=0;i<n;i++){
String str = sc.next();
int[] s = new int[128];
for(int j=0;j<str.length();j++){
s[str.charAt(j)]++;//将所有字母的ascii码作为下标
//数组值存的是字母出现的次数
}
Arrays.sort(s);//升序排列
int mul=26,sum=0;
//只处理大于0的值
for(int j=s.length-1;j>0&&s[j]>0;j--){
sum+=s[j]*mul;
mul--;
}
System.out.println(sum);
}
}
}
}
查看5道真题和解析