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; } }
参考引用
- 本系列归档至https://github.com/waylau/nowcoder-exam-oj
- 《Java 数据结构及算法实战》:https://github.com/waylau/java-data-structures-and-algorithms-in-action
- 《数据结构和算法基础(Java 语言实现)》(柳伟卫著,北京大学出版社出版):https://item.jd.com/13014179.html