题解 | #查找兄弟单词#

查找兄弟单词

https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68

import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            //字典单词个数
            int n = in.nextInt();
            //去重
            List<String> dicList=new ArrayList<>();
            for(int i=0;i<n;i++){
                String dic=in.next();
                dicList.add(dic);
            }
            //单词X
            String x = in.next();
            //k
            int k=in.nextInt();
            //寻找兄弟单词:与X不等,但字符都相同
            List<String> list=new ArrayList<>();
            for(String bro:dicList){
                if(!bro.equals(x)){
                    //字典单词中的每个字符出现的次数
                    Map<Character,Integer> map=new HashMap<>();
                    for(int i=0;i<bro.length();i++){
                        char ch=bro.charAt(i);
                        Integer count=map.get(ch);
                        if(count==null){
                            map.put(ch,1);
                        }else{
                            map.put(ch,count+1);
                        }
                    }
                    //单词X对比
                    int flag=0;
                    for(int i=0;i<x.length();i++){
                        char ch=x.charAt(i);
                        Integer count=map.get(ch);
                        if(count!=null&&count>0){
                            map.put(ch,count-1);
                        }else{
                            flag++;
                            break;
                        }
                    }
                    if(flag==0){
                        //判断是否为兄弟单词
                        int flag2=0;
                        Set<Character> checkSet=map.keySet();
                        for(Character key:checkSet){
                            if(map.get(key)!=0){
                                flag2++;
                                break;
                            }
                        }
                        if(flag2==0){
                            list.add(bro);
                        }       
                    }
                }
            }
            //兄弟单词排序
            //System.out.println(list);
            Collections.sort(list);
            System.out.println(list.size());
            if(k<list.size()){
                System.out.println(list.get(k-1));
            }
            
        }
    }
}

通过率咋这么低,,,这题也不难啊,逻辑很清晰。

全部评论

相关推荐

不愿吃饼的变色龙很感性:89k,那你得年薪1000w多
点赞 评论 收藏
分享
03-05 14:55
已编辑
哈尔滨工程大学 Java
Jhin4ever:别去,杂活太多,今天让你部署一下模型,明天让你写一下LLM工作流,后天要你研究一下Agent,想微调模型都难
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务