字符统计及重排

标题:字符统计及重排 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及其出现次数。如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前。

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] dataArray = sc.nextLine().split("");
        Map<String,Integer> dataMap = new HashMap<>();
        for (String d : dataArray) {
            if(dataMap.containsKey(d)) {
                dataMap.put(d,dataMap.get(d)+1);
            } else {
                dataMap.put(d,1);
            }
        }
        List<ZiMu> ziMuList = new ArrayList<>();
        for (String data : dataMap.keySet()) {
            ziMuList.add(new ZiMu(data, dataMap.get(data)));
        }
        ziMuList.sort(new Comparator<ZiMu>() {
            @Override
            public int compare(ZiMu o1, ZiMu o2) {
                int ca = o2.count - o1.count;
                if (ca == 0) {
                    int ch1 = o1.ziMu.charAt(0);
                    int ch2 = o2.ziMu.charAt(0);
                    if(ch1 >= 'A' && ch1 <= 'Z') {
                        ch1 = ch1 + 100;
                    }
                    if(ch2 >= 'A' && ch2 <= 'Z') {
                        ch2 = ch2 + 100;
                    }
                    return ch1 - ch2;
                } else {
                    return ca;
                }
            }
        });
        StringBuilder result = new StringBuilder();
        for (ZiMu z : ziMuList) {
            result.append(z.ziMu).append(":").append(z.count).append(";");
        }
        System.out.println(result);
    }

    static class ZiMu{
        String ziMu;
        int count;
        public ZiMu(String ziMu,int count) {
            this.ziMu = ziMu;
            this.count = count;
        }
    }
}


全部评论

相关推荐

notbeentak...:孩子,说实话,选择很重要,可能你换一个方向会好很多,但是现在时间不太够了,除非准备春招
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务