题解 | #名字的漂亮度#
名字的漂亮度
http://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; /** * HJ45 名字的漂亮度 * * 描述 * 给出一个名字,该名字有26个字符组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。 * 每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。 * * 给出多个名字,计算每个名字最大可能的“漂亮度”。 * * 本题含有多组数据。 */ public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List<String> list = new ArrayList<>(); while (scanner.hasNext()) { int count = scanner.nextInt(); for (int i = 0; i < count; i++) { list.add(scanner.next()); } } for (String name : list) { Map<Character,Integer> map = new HashMap<>(); for (char c : name.toCharArray()) { if (map.containsKey(c)) { map.put(c, map.get(c)+1); } else { map.put(c, 1); } } //对map根据value降序排序 将map转为list排序 List<Map.Entry<Character, Integer>> sortedList = new ArrayList<>(map.entrySet()); Collections.sort(sortedList, new Comparator<Map.Entry<Character, Integer>>() { @Override public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) { return o2.getValue() - o1.getValue(); } }); int number = 26; int result = 0; for (Map.Entry<Character, Integer> entry : sortedList) { result += number-- * entry.getValue(); } System.out.println(result); } } }