华为机试-27 查找兄弟单词
日常刷题记录,欢迎讨论交流。
这道题本来想用原来的单词作为replaceAll()里面的regex,然后逐个替换字典中的单词来判断是否兄弟单词,而实际该方法行不通。只能对原来的单词和字典中的单词逐个排序之后比较才能判断是否属于兄弟单词。
牛客网题目链接:https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
描述
定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。
兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。
现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?
注意:字典中可能有重复单词。
数据范围:1≤n≤1000 ,输入的字符串长度满足 1≤len(str)≤10 , 1≤k<n
输入描述:
输入只有一行。 先输入字典中单词的个数n,再输入n个单词作为字典单词。 然后输入一个单词x 最后后输入一个整数k
输出描述:
第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。
示例1
输入:
3 abc bca cab abc 1
输出:
2 bca
示例2
输入:
6 cab ad abcd cba abc bca abc 1
输出:
3 bca
说明:
abc的兄弟单词有cab cba bca,所以输出3 经字典序排列后,变为bca cab cba,所以第1个字典序兄弟单词为bca
1 import java.util.Scanner; 2 import java.util.List; 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.Arrays; 6 7 public class Main{ 8 public static void main(String[] args){ 9 Scanner sc = new Scanner(System.in); 10 int num = sc.nextInt(); 11 List<String> ls = new ArrayList<>(); 12 for(int i = 0; i < num; i++){ 13 ls.add(sc.next()); 14 } 15 String str = sc.next(); 16 int k = sc.nextInt(); 17 int count = 0; 18 String strk = ""; 19 Collections.sort(ls); 20 char[] chstr = str.toCharArray(); 21 Arrays.sort(chstr); 22 for(String stemp : ls){ 23 if(str.equals(stemp) || str.length() != stemp.length()){ 24 continue; 25 } 26 char[] chtemp = stemp.toCharArray(); 27 Arrays.sort(chtemp); 28 if(!Arrays.equals(chstr,chtemp)){ 29 continue; 30 } 31 count++; 32 if(count == k){ 33 strk = stemp; 34 } 35 } 36 System.out.println(count); 37 if(strk.length()>0){ 38 System.out.println(strk); 39 } 40 } 41 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用