华为机试(JAVA)真题Od-字符串重新排序
题目链接:
java代码://通过重写Comparator接口里面的compare方法来实现
package com.company; import java.util.*; public class Mian2023020702 { public static void main(String[] args){ Scanner in =new Scanner(System.in); String str=in.nextLine(); String[] data=str.split(" "); List<String> lists=new ArrayList<>(); for(int i=0;i<data.length;i++){ lists.add(toSortStr(data[i])); } //次数和单词长度对应排序 Collections.sort(lists, new Comparator<String>() { @Override public int compare(String o1, String o2) { //次数 int n=allNum(lists,o2)-allNum(lists,o1); //长度 int n1=o1.length()-o2.length(); if(n==0 && n1==0){ return comAdict(o1,o2); }else if(n==0 && n1!=0){ return n1; }else { return n; } } }); for(String k:lists){ if(!lists.get(lists.size()-1).equals(k)){ System.out.print(k+" "); }else { System.out.println(k); } } } //字符串按字典排序 static String toSortStr(String str){ String[] data=str.split(""); Arrays.sort(data); String str1=""; for(int i=0;i<data.length;i++){ str1=str1+data[i]; } return str1; } //统计data中字符串得次数 static int allNum(List<String> lists,String str){ int count=0; for(int i=0;i<lists.size();i++){ if(lists.get(i).equals(str)){ count++; } } return count; } //按字典比较 static int comAdict(String str,String str1){ for(int i=0;i<str.length();i++){ if(str.charAt(i)!=str1.charAt(i)){ return (int)str.charAt(i)-(int)str1.charAt(i); } } return 0; } }
代码如果存在逻辑问题,欢迎指正~