一、题目描述
给定一个字符串s,s包括以空格分隔的若干个单词。需要对s进行如下处理后输出:
单词内部调整:对每个单词字母重新按字典序排序。
单词间顺序调整:
- 统计每个单词出现的次数,并按次数降序排列。
- 次数相同,按单词长度升序排列。
- 次数和单词长度均相同,按字典序排列。
- 输出处理后的字符串,每个单词以一个空格分隔。
二、输入输出示例
输入:
This is an apple
输出:
an is This aelpp
输入:
My sister is in the house not in the yard
输出:
in in eht eht My is not adry ehosu eirsst
Java代码
package odTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class charRenewOrder {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] inputChar = scanner.nextLine().split(" ");
List<String> strList = new ArrayList<>();
Map<String,Integer> count = new HashMap<>();
for(int i=0;i<inputChar.length;i++) {
char[] charList = inputChar[i].toCharArray();
Arrays.sort(charList);
String str = new String(charList);
// System.out.println(str);
strList.add(str);
if(count.containsKey(str)) {
count.put(str, count.get(str)+1);
}else {
count.put(str, 1);
}
}
Collections.sort(strList, new Comparator<String>(){
@Override
public int compare(String arg0, String arg1) {
// TODO Auto-generated method stub
int val0 = count.get(arg0);
int val1 = count.get(arg1);
int res = 0;
if(val0>val1) {
res = -1;
}else if(val0 == val1&&arg0.length()==arg1.length()) {
res = arg0.compareTo(arg1);
}else if(val0 == val1) {
res = arg0.length()-arg1.length();
}
return res;
}
});
strList.forEach(m->{
System.out.print(m + " ");
});
}
}

被折叠的 条评论
为什么被折叠?



