思路:
先对输入的字符串处理,截取成【n】、n个【单词元素】、【待寻找】、【k】
n是长度
n个单词元素,首先先看看【待寻找】有没有在n中有一样的,若有,则找下一个单词。若无,则挨个在单词元素的数组里,取出一个个单词,进行是否为兄弟单词的对比,若是,放入兄弟单词数组。
最后输出兄弟单词数组长度len,若k>len就不输出,否则就输出兄弟单词哈希表,经过字典序排序后,下标为k-1的单词
 
 
其中,是否为兄弟单词的对比,可以用arrays.sort()来实现,也可以申请一个哈希表,用containsKey()或containsValue()实现

 

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 import java.util.*;
 5 
 6 public class Main {
 7     public static void main(String[] args) throws IOException {
 8         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
 9         String str= br.readLine();//取出一整长串
10         String[] strS = str.split(" ");
11         int len = Integer.valueOf(strS[0]);//长度
12         //String[] broList = null;//用于存放兄弟单词
13         //ArrayList<String,Integer> broList = new HashMap<String,Integer>();//用于存放兄弟单词
14         List<String> broList = new ArrayList<>();
15         String find = strS[len+1];//待查找的单词
16         
17         //System.out.println("find: "+find);
18         
19         
20         int k = Integer.valueOf(strS[len+2]);//待找的第k个兄弟单词
21         int i =0;
22         for(i =0;i<len;i++){
23             if(ifBro(find,strS[i+1])){//逐个逐个字符判断是否是兄弟单词
24                 25                 //System.out.println("兄弟单词加入: "+strS[i+1]);
26                 broList.add(strS[i+1]);
27             }
28         }      
29         
30         int brSize = broList.size();//兄弟单词个数
31         System.out.println(brSize);
32         
33         
34         
35         if(k>brSize){//k超过兄弟单词个数
36             
37         }else{//否则输出,经字典序排序之后的第k个兄弟单词
38             //Set set = broList.keySet();
39             //System.out.println(set);
40             Object[] obj = broList.toArray();
41             Arrays.sort(obj);
42             int num = 0;
43             String[] findBro = new String[brSize];
44             for(Object ob:obj){
45                 findBro[num] = (String)ob;
46                 num++;
47             }
48             System.out.println(findBro[k-1]);
49         }
50         
51     }
52     public static boolean ifBro(String find,String check){
53         //长度不一样肯定不是兄弟单词
54         if((find.length() != check.length())||find.equals(check)) return false;
55         
56         char[] find_arr = find.toCharArray();
57         char[] check_arr = check.toCharArray();
58         Arrays.sort(find_arr);
59         Arrays.sort(check_arr);
60         
61         if(Arrays.equals(find_arr,check_arr)){
62             return true;
63         }
64         return false;   
65         
66     }
67 }

 

一开始是用的哈希表。
我可能跟个傻逼一样
              
 
此时还想着:“不会算数的吗??放都放进了”
 
 
后来:“好吧。我才是傻逼。”
题目注明了,字典元素可能重复。哈希表key唯一,因此bcbda这个重复的就只记了一个
 
修改完用动态数组,已通过。

 

posted on 2022-07-31 19:04  Jolyne123  阅读(134)  评论(0编辑  收藏  举报