首页 > 试题广场 >

查找兄弟单词

[编程题]查找兄弟单词
  • 热度指数:430363 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}定义一个由小写字母构成的字符串 s 的“兄弟单词”为:任意交换 s 中两个字母的位置,得到的新字符串,且其与 s 不同。
\hspace{15pt}现在,对于给定的 n 个字符串 s_1, s_2, \dots, s_n 和另一个单独的字符串 x ,你需要解决两个问题:
\hspace{23pt}\bullet\,统计这 n 个字符串中,有多少个是 x 的“兄弟单词”;
\hspace{23pt}\bullet\,将这 n 个字符串中 x 的“兄弟单词”按字典序从小到大排序,输出排序后的第 k 个兄弟单词。特别地,如果不存在,则不输出任何内容。

\hspace{15pt}从字符串的第一个字符开始逐个比较,直到找到第一个不同的位置,通过比较这个位置字符的字母表顺序得出字符串的大小,称为字典序比较。

输入描述:
\hspace{15pt}在一行上:
{\hspace{20pt}}_\texttt{1.}\,先输入一个整数 n \left(1 \leqq n \leqq 1000\right) 代表字符串的个数;
{\hspace{20pt}}_\texttt{2.}\,随后,输入 n 个长度为 1 \leqq {\rm length}(s_i) \leqq 10 ,仅由小写字母构成的字符串 s_1, s_2, \dots, s_n
{\hspace{20pt}}_\texttt{3.}\,随后,输入一个字符串 x
{\hspace{20pt}}_\texttt{4.}\,最后,输入一个整数 k \left(1 \leqq k \leqq n\right) 代表要查找的兄弟单词的序号。


输出描述:
\hspace{15pt}第一行输出一个整数,代表给定的 n 个字符串中,x 的“兄弟单词”的数量;
\hspace{15pt}第二行输出一个字符串,代表将给定的 n 个字符串中 x 的“兄弟单词”按字典序排序后的第 k 小兄弟单词。特别地,如果不存在,则不输出任何内容。
示例1

输入

3 abc bca cab abc 1

输出

2
bca

说明

\hspace{15pt}在这个样例中,x 的兄弟单词为 \texttt{\texttt{\texttt{\texttt{\texttt{ 。其中,标橙色的两个字符串存在于所给定的 n 个字符串中。
示例2

输入

3 a aa aaa a 1

输出

0

说明

\hspace{15pt}在这个样例中,按照定义,字符串 \texttt{ 没有兄弟单词。
头像 Pourlaliberté
发表于 2021-10-13 15:48:03
import java.util.*; /** * @authore: * @data: 2021/10/13 * @Description: */ /** * 功能描述: <br> * @Param: 输入: * 6 cab ad abcd cba abc bca ab 展开全文
头像 牛客969573159号
发表于 2021-09-24 16:16:49
while True: try: #读取输入数据,并且转换为列表 data1 = input().split() #获取单词的个数 n1 = data1[0] #按字典排序的第几个兄弟词 n2 = 展开全文
头像 摸鱼学大师
发表于 2021-10-19 09:11:43
题目的主要信息: 兄弟单词定义为:仅交换该单词字母顺序任意次,生成的单词 兄弟单词要求与原单词不同 现给定nnn个单词,另外再给一个单词str,寻找上面nnn个单词中str的兄弟单词里,按字典序排列后的第kkk个单词 先输出兄弟单词个数,不足kkk个兄弟单词则不输出单词 方法一:排序判断 具体做 展开全文
头像 XJTU-SN
发表于 2022-04-23 14:21:53
难度不大,上代码,看注释 #include<stdio.h> #include<stdlib.h> #include<string.h> /* IsBrother() 是兄弟字串,则返回1;否则返回0 */ int IsBrother(char* aim,c 展开全文
头像 牛客518518878号
发表于 2022-01-25 23:42:04
1、对n个单词升序排序 2、第n个单词和 x 相等 和 长度不一致的跳过 3、对第n个单词 和 x 的每个字符升序排序,并比较是否相等,如果相等则为兄弟单词。 import java.util.*; public class Main{ public static void main(Strin 展开全文
头像 305602188
发表于 2020-04-26 13:20:54
这个题坑有点多首先,题目描述不清楚;然后:(1)需要判断多组数据,这个把我坑坏了!(2)需要兄弟单词可以有重复的(3)需要判断 查找单词的索引不能大于兄弟字典的大小 import java.util.*; public class Main{ public static boolean ch 展开全文
头像 牛客700002449号
发表于 2021-01-17 20:59:04
while True:     try:         s_list = input().split()    &nb 展开全文
头像 水木清华_AI
发表于 2020-03-22 22:29:14
/* 本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。 欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。 我是一名有诗人气质的网络安全工程师 期待与你的思想交流碰撞出智慧的花火 水木清华 2020-03-22 查找兄弟单词 */ #incl 展开全文
头像 XiaoRong7
发表于 2022-04-05 14:33:03
#1.直接暴力解法,首先处理输入的字符串,提取要判断的整数,即要判断的字符串个数,后面就是用[-2]、[-1]索引取出目标字符串; #2.判断逻辑是对比目标字符串和待判断字符串的字符是否相同,但是顺序不同,所以统一用排序,保证字符数和所含字符是否相同,最后最排除掉连顺序都一样的字符串; 展开全文
头像 Steven.Zeng
发表于 2020-08-10 11:32:41
小贴士 本题目难度适中,理解题意需要浪费一些时间 在调式过程中,会发现有越界出现,是由于查找索引大于兄弟单词个数 在Java中,个人建议多用已有API,避免重复造轮子 输入:3 abc bca cab abc 1 输出:2 bca/** * using BufferedReader 展开全文