题解 | #名字的漂亮度#

名字的漂亮度

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);
        }
    }
}
全部评论

相关推荐

10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务