题目描述回忆版:输入字符串数组,输出出现次数第二多的小写字母及其出现次数,如果没有第二多的(即都并列多)返回空;如果有并列的,以字母排序。ep:输入:["abb","cdd34&","#$2d3ddaa"]输出:a-3package com.example;// 本题为考试单行多行输入输出规范示例,无需提交,不计分。import java.util.*;//题目:输入一个String[],输出出现次数第二多的小写字母,如果没有第二少的返回空;如果有并列的,以字母排序。public class ToFindTheSecondLowerCharacter {    public static String getAns(String[] ss ){        HashMap<Character,Integer> hm = new HashMap<>();        for (int i = 0; i < ss.length; i++) {            String a = ss[i];            for (int j = 0; j < a.length(); j++) {                char ch = a.charAt(j);                if(ch>='a'&&ch<='z') {                    hm.put(ch, hm.getOrDefault(ch, 0) + 1);                }            }        }  //对hash表进行自定义排序,从大到小,如果出现次数相同,根据ASC2码排序,        ArrayList<Map.Entry<Character, Integer>> entries = new ArrayList<>(hm.entrySet());//        entries.sort(((o1, o2) -> o2.getValue().compareTo(o1.getValue())));        entries.sort(new Comparator<Map.Entry<Character, Integer>>() {            @Override            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {                if (o1.getValue()> o2.getValue()){                    return o1.getValue();                }else if (o1.getValue().equals(o2.getValue())){                    return o1.getKey()>o2.getKey()? o1.getValue() : o2.getValue();                }                return o2.getValue();            }        });  //以下处理边界条件,提高测试用例通过率        if (entries.size()<2||entries==null){            return " ";        }        int index = 1;        while(index<entries.size()){            if(entries.get(index-1).getValue().equals(entries.get(index).getValue())){                index++;                continue;//跳出当前循环            }            Character key = entries.get(index).getKey();            Integer value = entries.get(index).getValue();            return key+"-"+value;        }        return " ";    }    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        while (in.hasNextInt()) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例            int a = in.nextInt();            String[] ss = new String[a];            for (int i = 0; i < a; i++) {                String s = in.next();                ss[i]  = s;            }            System.out.println(getAns(ss));        }    }}
点赞 0
评论 1
全部评论

相关推荐

1. 多做一劳永逸的事情。很多事情一次学会基本可以大学四年都不再为这类事情发愁。小的比如学会markdown,记笔记就变得方便快捷;大的比如自己经常要发布上线服务,就花几天搭建一个集群。2. 时刻具备3-7天掌握一项技能的心理准备。无论是学科竞赛、期末考试,还是准备实习、秋招,很多时候当你需要快速运用某项技能做事的时候,不会有那么多时间给你准备,这时候就需要速成。3. 加入/组建一个技术团体,社团/面试群/社群/技术博主的圈子,并且养成水群习惯。只有你参与并融入你正在追求的事业的氛围里,你才能保持动力去做一件事。推荐一个博主【程序员牛肉】的圈子:https://pd.qq.com/s/daelsgft54. 尽早明确自己距离目标还差什么。很多人学习的非常努力,但是方向不明确。最简单的例子,很多我帮忙找实习秋招的朋友,简历都过不了,却花大把时间在背八股上。面试的过程是阶段性的,要考虑的先是有面试机会、再是怎么面试。5. 思维不要被约束。后端语言java、c++可以,golang也可以;项目苍穹外卖、黑马点评可以,github上的高star项目也可以;数据库用mysql、redis可以,用postgresql也可以;项目里的ai模块用rag、mcp可以,最简单的function call也可以。帮很多人看简历问题的时候,很多东西都是硬写上去的,项目是自己的,不是非要和网上大流一致才是好项目。
想进开水团喝开水:杭电也是双非是吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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