题目描述:
给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出:
1、单词内部调整:对每个单词字母重新按字典序排序
2、单词间顺序调整:
1)统计每个单词出现的次数,并按次数降序排列
2)次数相同,按单词长度升序排列
3)次数和单词长度均相同,按字典升序排列
请输出处理后的字符串,每个单词以一个空格分隔。
输入描述:
一行字符串,每个字符取值范围:【a-zA-z0-9】以及空格,字符串长度范围:【1,1000】
示例1:
输入
This is an apple
输出
an is This aelpp
示例2:
输入:
My sister is in the house not in the yard
输出:
in in eht eht My is not adry ehosu eirsst
个人解法
不保证通过率
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/**
*
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] inputs = br.readLine().split(" ");
HashMap<String, Integer> times = new HashMap<>();
for (String input : inputs) {
char[] chars = input.toCharArray();
Arrays.sort(chars);
String s = new String(chars);
times.put(s, times.getOrDefault(s, 0) + 1);
}
ArrayList<Map.Entry<String, Integer>> list = new ArrayList<>(times.entrySet());
list.sort((o1, o2) -> {
if (o1.getValue().equals(o2.getValue())) {
if (o1.getKey().length() == o2.getKey().length()) {
return o1.getKey().compareTo(o2.getKey());
}
return o1.getKey().length() - o2.getKey().length();
}
return o2.getValue() - o1.getValue();
});
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, Integer> entry : list) {
sb.append(entry.getKey()).append(" ");
}
System.out.println(sb);
}
}