思路:
先对输入的字符串处理,截取成【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这个重复的就只记了一个
修改完用动态数组,已通过。