华为HJ45

//给出一个字符串,该字符串仅由小写字母组成,
// 定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
//每个字母都有一个“漂亮度”,范围在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);
            }
        }
    }
}

答题思路差不多,用输入流更快

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牟朋轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值