Java题解 | HJ45 #名字的漂亮度#

名字的漂亮度

https://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3

描述

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

给出多个名字,计算每个名字最大可能的“漂亮度”。

本题含有多组数据。

输入描述:整数N,后续N个名字

输出描述:每个名称可能的最大漂亮程度

输入:

2
zhangsan
lisi

输出:

192
101

算法

  • 对输入的字符串按照字母进行分类;
  • 每类字母按照数量进行排序;
  • 字母列表进行漂亮度赋值。数量最大的字母赋值最大的漂亮度26,数量第二大的字母赋值最大的漂亮度25......因此类推;
  • 所有字母漂亮度做总和。
/*
 * Copyright (c) waylau.com, 2022\. All rights reserved.
 */

package com.waylau.nowcoder.exam.oj.huawei;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

/**
 * HJ45 名字的漂亮度.
 * 描述:给出一个名字,该名字有26个字符组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。 
 * 每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。
 * 给出多个名字,计算每个名字最大可能的“漂亮度”。
 * 本题含有多组数据。
 * 输入描述:整数N,后续N个名字
 * 输出描述:每个名称可能的最大漂亮程度
 * 输入:
 * 2
 * zhangsan
 * lisi
 * 输出:
 * 192
 * 101
 *
 * @author Way Lau
 * @since 2022-08-23
 */
public class HJ045TheBeautyOfTheName {

    public static void main(String[] args) {
        // 输入
        Scanner in = new Scanner(System.in);
        List result = new ArrayList();

        int n = Integer.valueOf(in.nextLine());

        for (int i= 0; i<n; i++) {
            String name = in.nextLine();
            result.add(doBeauty(name));
        }

        // 输出
        result.forEach(System.out::println);

        // 关闭
        in.close();
    }

    private static int doBeauty(String name) {
        Map map = new HashMap();
        for (char ch : name.toCharArray()) {
            Integer count = map.get(ch);
            if (count == null) {
                count = 1;
            } else {
                count ++;
            }

            map.put(ch, count);
        }

        // map值转List
        List list =  new ArrayList();
        for (Map.Entry entry: map.entrySet()) {
            list.add(entry.getValue());
        }

        // 由小到大排序
        list.sort(Comparator.naturalOrder());

        // 总和
        int size = map.size();
        int beautyValue = 26 - size +1;
        int total = 0;
        for (int count : list) {
            total += count * beautyValue;
            beautyValue ++;
        }

        return  total;
    }

}

参考引用

#华为机考#
全部评论

相关推荐

已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务