题解 |HJ102 #字符统计#

字符统计

https://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        char[] chars = str.toCharArray();
        Map<Character, Integer> map = new HashMap<>();
//        样例里,c和d出现3次,a出现2次,但c的ASCII码比d小,所以先输出c,再输出d,最后输出a. 输出cda
        //先将str按照ASCII大到小排序好再存进map

//        char a = '0';
//        for (int i = 0; i < chars.length; i++) {
//            for (int j = i+1; j <chars.length ; j++) {
//                if (chars[i]<chars[j]){
//                    //若右小于左则交换
//                    a = chars[j];
//                    chars[j] = chars[i];
//                    chars[i] = a;
//                }
//            }
//            //此时map中是adc
//        }
//        System.out.println("排序以后 "+Arrays.toString(chars) );

        for (int i = 0; i < chars.length; i++) {
            map.put(chars[i], map.getOrDefault(chars[i], 0) + 1);
            //此时map中是cda
        }

//        System.out.println(map);
//        Set<Map.Entry<Character, Integer>> entrySet = map.entrySet();

        //使用比较器按照value值进行倒序输出

        ArrayList<Map.Entry<Character, Integer>> list = new
        ArrayList<Map.Entry<Character, Integer>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
            @Override
            public int compare(Map.Entry<Character, Integer> o1,
                               Map.Entry<Character, Integer> o2) {
                //使用比较器按照value值进行倒序输出 o2.comp o1 就是倒序
                int result = o2.getValue().compareTo(o1.getValue());
                //result==0就是value值相等 其他情况为不相等
                //value值相等时按照key值正序排序
                return result == 0 ?  o1.getKey() - o2.getKey() : o2.getValue() - o1.getValue();
            }
        });
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i).getKey());
        }
//        System.out.println();
//      输出map看出map本身并未改变 改变的只是list中的顺序
//        System.out.println(map);


//        for (Map.Entry<Character, Integer> entry : entrySet) {
//            System.out.print(entry.getKey());;
////            System.out.print(entry.getValue());
//        }




    }
}

本人解法中本题难点在于按照map的value值倒序输出且value值相等时按照Key值正序输出;

#华为机试#
全部评论

相关推荐

程序员鼠鼠_春招版:都很烂大街,rpc也基本没人问,考研吧,不然就包装一段实习再去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务