名字的漂亮度.其实就是 按字母出现的次数依次用 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); } } } }