题解 | #查找兄弟单词#

查找兄弟单词

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

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 3 abc bca cab abc 1
        String input = in.nextLine();
        String[] split = input.split(" ");
        int size = Integer.parseInt(split[0]);
        int k = Integer.parseInt(split[split.length - 1]);
        String target = split[size + 1];
        String[] dic = new String[size];
        for (int i = 0; i < size; i++) {
            dic[i] = split[i + 1];
        }

		// 如果是兄弟单词就存入这就集合
        List<String> list = new ArrayList<>();
        for (String s : dic) {
            if (isBrother(s, target)) {
                list.add(s);
            }
        }

        // 输出兄弟单词个数
        System.out.println(list.size());
        // 输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出
        if (list.size() >= k) {
		  // 有的话才排序,节省性能
            list.sort(String::compareTo); // 按字典顺序排序
            System.out.println(list.get(k - 1));
        }
    }

    private static boolean isBrother(String s, String target) {
        if (s.length() != target.length())
            return false; // 长度不同
        if (s.equals(target))
            return false; // 同一个单词
        // 统计每个字母的个数
        int[] sAccount = new int['z'];
        int[] targetAccount = new int['z'];
        for (int i = 0; i < s.length(); i++) {
            sAccount[s.charAt(i)]++;
            targetAccount[target.charAt(i)]++;
        }
		// 如果每个字母的个数相同,则是兄弟单词
        return Arrays.equals(sAccount, targetAccount);
    }
}

全部评论

相关推荐

03-26 15:18
已编辑
华北水利水电大学 Java
点赞 评论 收藏
分享
求面试求offer啊啊啊啊:1600一个月?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务