华为OD机试 Java 实现【查找兄弟单词】【牛客练习题 HJ27】,附详细解题思路

在这里插入图片描述

一、题目描述

定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。

兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。

现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?

注意:字典中可能有重复单词。

二、输入描述

输入只有一行。 先输入字典中单词的个数n,再输入n个单词作为字典单词。 然后输入一个单词x 最后后输入一个整数k。

三、输出描述

第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。

四、解题思路

  1. 读取输入的字典单词个数 n;
  2. 创建一个 List 对象 datas,用于存储字典单词;
  3. 遍历输入,依次读取每个字典单词,并将其添加到 datas 列表中;
  4. 读取输入的单词x;
  5. 将单词x转换为字符数组 xs;
  6. 读取输入的整数k;
  7. 对 datas 列表进行字典序排序;
  8. 创建一个计数器变量 count 并初始化为0,用于统计满足条件的兄弟单词个数;
  9. 创建一个字符串变量 k,用于存储按字典序排序后的第k个兄弟单词;
  10. 遍历 datas 列表中的每个单词,对每个单词进行如下操作:
    • 如果当前单词与x相同,或者长度不同,跳过当前单词;
    • 将当前单词转换为字符数组 strs;
    • 对 xs 和 strs 数组进行升序排序;
    • 如果 strs 数组与 xs 数组不相等,跳过当前单词;
    • 将 count 加1,表示找到一个满足条件的兄弟单词;
    • 如果 count 等于k,将当前单词赋值给 k;
  11. 输出 count 表示满足条件的兄弟单词个数;
  12. 输出 k 表示按字典序排序后的第k个兄弟单词;

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    while(sc.hasNext()) {
        int num = sc.nextInt();
        List<String> datas = new ArrayList();
        for (int i = 0; i < num; i++) {
            datas.add(sc.next());
        }
        String x = sc.next();
        char[] xs = x.toCharArray();//取反
        int index = sc.nextInt();
        Collections.sort(datas);
        int count = 0;
        String k = "";
        for (String str : datas) {
            if (x.equals(str) || x.length() != str.length()) {
                continue; //字符串一样 和 长度不一样的跳过
            }
            char[] strs = str.toCharArray();
            Arrays.sort(xs);
            Arrays.sort(strs);
            if (!Arrays.equals(strs, xs)) {
                continue;//升序排序不相等,跳过
            }
            count += 1; // 满足条件的累加
            if (count == index) {
                k = str;//第K个兄弟单词
            }
        }
        System.out.println(count);
        System.out.println(k);
    }
}

六、效果展示

华为OD机试 Java 实现【查找兄弟单词】【牛客练习题 HJ27】,附详细解题思路_第1张图片


下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为,java,算法,学习,后端)