题目链接:
https://renjie.blog.csdn.net/article/details/127947829
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;
}
}
代码如果存在逻辑问题,欢迎指正~