HJ45 - 名字的漂亮度 - 华为

(java实现)


问题

题目描述:
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。

本题含有多组数据。
输入描述:
整数N,后续N个名字
输出描述:
每个名称可能的最大漂亮程度
示例1:

输入

2
zhangsan
lisi

输出

192
101

问题分析:

首先要理解“最大漂亮度”的值的计算方法;
其原理:字符串中的某个字符出现的频数最高的,其漂亮度为26,其余的依次递减,直到1。
如题目中的“lisi”,“i”出现的频率最高,为2;故其漂亮度为26,“l”和“s”分别为25、24;
计算过程:漂亮度=262+251+24=101.

相关知识:

1、排序函数的使用:Arrays.sort(arr);

注意:要读入的内容包含用整数和字符串的时候,要按行来去读,因为读int的时候,是读取不到换行符的。读取的例子如下:
String line = input.nextLine();
int count = Integer.parseInt(line);

算法实现:

参考代码:

import java.util.*;
 
public class Main {
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        while (input.hasNext())
        {
            String line = input.nextLine();     //注意
            int count = Integer.parseInt(line);  
            for (int i=0; i<count; i++)
            {
                String str = input.nextLine();
                char[] ch = str.toCharArray();
                int[] arr = new int[27];
                int sum = 0, in=0;
                for (int j=0; j<ch.length; j++)
                {
                    in = ch[j]-'a'+1;
                    arr[in]++; //统计
                }
                Arrays.sort(arr);       //按频率大小来排序,频率越高,漂亮度越高
                for (int j=1; j<27; j++)
                {
                    sum = sum + j*arr[j];
                }
                System.out.println(sum);
            }
        }
    }
}
全部评论

相关推荐

02-15 22:29
门头沟学院 Java
点赞 评论 收藏
分享
01-26 18:45
门头沟学院 Java
一天代码十万三:哥们实习再包一下吧,产出太笼统了,尽量体现业务
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务