Java教程

java题目 HJ27 查找兄弟单词

本文主要是介绍java题目 HJ27 查找兄弟单词,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

描述

定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。 兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。 现在给定你 n 个单词,另外再给你一个单词 str ,让你寻找 str 的兄弟单词里,按字典序排列后的第 k 个单词是什么? 注意:字典中可能有重复单词。   数据范围:1 \le n \le 1000 \1≤n≤1000 ,输入的字符串长度满足 1 \le len(str) \le 10 \1≤len(str)≤10  , 1 \le k < n \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.*;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5 
 6         Scanner scanner = new Scanner(System.in);
 7 
 8         while (scanner.hasNext()){
 9             //输入拆分为字符串数组
10             String[] s1 = scanner.nextLine().split(" ");
11             //多少个字符串
12             int n = Integer.parseInt(s1[0]);
13             //第x位置的字符串
14             String x = s1[s1.length -2];
15             int k = Integer.parseInt(s1[s1.length-1]);
16             
17             //创建字符串list,判断单词是否兄弟单词,是则添加到list中
18             List<String> ls = new ArrayList<>();
19             for(int i=1; i<=n; i++) {
20                 if(isBrother(x,s1[i])){
21                     ls.add(s1[i]);
22                 }
23             }
24             System.out.println(ls.size());  //输出兄弟单词个数
25             
26             Collections.sort(ls);  //字母排序
27             if(ls.size() >= k) {
28                 System.out.println(ls.get(k - 1));
29             }
30         }
31     }
32     
33     //将x和要比较的单词拆分为字符重新排序后比较
34     public static boolean isBrother(String x, String s) {
35         if(x.length() != s.length() || s.equals(x)) {
36             return false;
37         }
38         char[] cx = x.toCharArray();
39         char[] cs = s.toCharArray();
40         
41         Arrays.sort(cx);
42         Arrays.sort(cs);
43 //         boolean res = String.valueOf(cx).equals(String.valueOf(cs));
44         boolean res = new String(cx).equals(new String(cs));  //String构造方法转换
45         return res;
46     }
47 }

 

这篇关于java题目 HJ27 查找兄弟单词的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!