【依图科技】2023.09.07 笔试第二题回忆记录版

题目描述回忆版:输入字符串数组,输出出现次数第二多的小写字母及其出现次数,如果没有第二多的(即都并列多)返回空;如果有并列的,以字母排序。

ep:

输入:["abb","cdd34&","#$2d3ddaa"]

输出:a-3

package 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基础刷题笔试日记 文章被收录于专栏

记录2023年秋招开始刷题以来的笔试复盘记录

全部评论
佬,a了几道?进面了吗?
点赞 回复 分享
发布于 2023-09-14 20:42 福建

相关推荐

不愿透露姓名的神秘牛友
10-24 20:50
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务