importjava.util.*;publicclassMain{publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);String tel = sc.nextLine();int[] flag =newint[tel.length()];List<Integer> list =newLinkedList<>();Map<Integer,Integer> map =newHashMap<>();for(int i =0; i < tel.length(); i++){int x = tel.charAt(i)-'0';if(flag[x]==0){
list.add(x);
flag[x]=1;}}Collections.sort(list);System.out.print("int[] arr = new int[]{");for(int i = list.size()-1; i >=0; i--){int a = list.get(i);
map.put(a, list.size()-1- i);if(i ==0)System.out.print(a +"};");elseSystem.out.print(a+",");}System.out.println();System.out.print("int[] index = new int[]{");for(int i =0; i < tel.length(); i++){int x = tel.charAt(i)-'0';if(i == tel.length()-1)System.out.print(map.get(x)+"};");elseSystem.out.print(map.get(x)+",");}}}
思路遍历电话号码字符串,同时将其中出现的数字记录下来(这里假设我们记录到了 list 这个列表中):这里可以借助一个flag数组来判断当前这个数字之前有没有出现过得到电话号码中出现过的所有数字后,对它们进行一个排序(如果用了Collections.sort()的默认排序,那么后边在输出的时候就要从后往前遍历list;当然你也可以直接让它降序排列《如何实现sort()降序排列》)因为我们还要输出电话号码中每一个数字在列表中的下标,因此我们可以用Map来存储 <数字,下标> 这个键值对,以便