题解 | #查找兄弟单词#

查找兄弟单词

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

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Objects;
import java.util.Comparator;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        ArrayList<String> dic = new ArrayList<>();
        for(int i=0;i<n;i++){
            dic.add(sc.next());
        }

        String queryStr = sc.next();
        int index = sc.nextInt();

        ArrayList<String> broList =  getBro(queryStr,dic);
        broList.sort(new Comparator<String>(){
            @Override
            public int compare(String o1,String o2){
                int n = Math.min(o1.length(),o2.length());

                for(int i = 0;i<n;i++){
                    if(o1.charAt(i)!=o2.charAt(i))
                        return o1.charAt(i) - o2.charAt(i);
                }
                return o1.length() - o2.length();
            }
        });

        if(index<=broList.size()) System.out.println(broList.get(index-1));
    }

    private static ArrayList<String> getBro(String s,ArrayList<String> list){
        
        int[] hash1 = new int[27];
        int length = s.length();
        for(int i=0;i<length;i++){
            hash1[s.charAt(i)-97]++;
        }
        
        ArrayList<String> result = new ArrayList<>();
        for(String val: list){
            int[] hash2 = new int[27];
            if(val.length()!=length) continue;
            if(s.equals(val)) continue;
            
            for(int i=0;i<length;i++){
                hash2[val.charAt(i)-97]++;
            }
            boolean isSame = true;
            for(int i=0;i<27;i++){
                // isSame &= (hash1[i]==hash2[i]);
                // if(hash1[i]!=hash2[i]){
                //     isSame = false;
                //     break;
                // }

                if(!(isSame &= (hash1[i]==hash2[i]))){
                    break;
                }
            }
            if(isSame){
                result.add(val);
            }
        }
        System.out.println(result.size());
        return result;
    }
}

之前写过比较器排序 所以这题没啥太难的点。

判断是否兄弟,首先通过长度初判,长度不同,不可能是;题意上说自己不是自己兄弟,所以也提前判,避免不必要的操作。然后通过hash直接比较每个字母数量是不是一样的就ok了

全部评论

相关推荐

自由水:笑死了,敢这么面试不敢让别人说
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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