华为机试-027-中等-HJ27.查找兄弟单词


一、描述

定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。
兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。
现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?
注意:字典中可能有重复单词。
在这里插入图片描述

1.1、输入描述

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

1.2、输出描述

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

二、示例

2.1、示例1

输入:

3 abc bca cab abc 1

输出:

2
bca

说明:

abc的兄弟单词有cab cba bca,所以输出3
经字典序排列后,变为bca cab cba,所以第1个字典序兄弟单词为bca

三、答案(java)

3.1、方法一

package com.tzq.hwod;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * @authore:
 * @data: 2021/10/13
 * @Description:
 */
/**
 * 功能描述: <br>
 * 
 * @Param: 输入: 6 cab ad abcd cba abc bca abc 1 复制 输出: 3 bca 复制 说明: abc的兄弟单词有cab
 *         cba bca,所以输出3 经字典序排列后,变为bca cab cba,所以第1个字典序兄弟单词为bca
 * @Return:
 * @Author: guokun
 * @Date: 2021/10/13 14:18
 */
public class Main {
	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);

		while (scanner.hasNext()) {
			String[] ss = scanner.nextLine().split(" ");
			Integer a = Integer.parseInt(ss[0]);
			String x = ss[ss.length - 2];
			Integer k = Integer.parseInt(ss[ss.length - 1]);
			List<String> list = new ArrayList<>();

			for (int i = 1; i <= a; i++) {
				if (isBrother(x, ss[i])) {
					list.add(ss[i]);
				}
			}
			int size = list.size();
			System.out.println(size);
			if (size >= k) {
				Collections.sort(list);
				System.out.println(list.get(k - 1));
			}

		}
	}

	public static boolean isBrother(String x, String y) {
		if (x.length() != y.length() || y.equals(x)) {
			return false;
		}
		char[] s = x.toCharArray();
		char[] j = y.toCharArray();
		Arrays.sort(s);
		Arrays.sort(j);
		return new String(s).equals(new String(j));

	}
}

在这里插入图片描述

四、答案(python 3)

4.1、方法一

#!/usr/bin/python
# -*- coding: UTF-8 -*-

while True:
    try:
        #读取输入数据,并且转换为列表
        data1 = input().split()
        #获取单词的个数
        n1 = data1[0]
        #按字典排序的第几个兄弟词
        n2 = data1[-1]
        #获取输入的n个单词
        data2 = data1[1:-2]
        #获取兄弟词
        data3 = data1[-2]

        #用于存储兄弟词的数量
        n3 = 0
        #用于存储兄弟词
        data4 = []

        for word in data2:
            if word == data3:
                continue
            elif sorted(word) == sorted(data3):
                n3 = n3 + 1
                data4.append(word)
        print(n3)
        #将兄弟词按照字典排序
        data5 = sorted(data4)
        print(data5[int(n2)-1])
    except:
        break

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tzq@2018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值