我有一段时间一直在苦苦挣扎的问题。我给了一个由英文字母的大小字母组成的单词,以对字符进行排序,以便在第一个位置出现在该单词中出现频率最高的字符,如果它们出现相同的次数,它们将按字典顺序排序。如:
输入:说明
输出:iinnssttcoru
到目前为止,我已经写了这篇文章,但是从这里开始,我不知道如何对它们进行排序并正确显示,提示?
public class Main {
public static void main(String[] args) throws IOException {
String testString = " ";
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
testString = rd.readLine();
Map<Character, List<Character>> map = new HashMap<>();
for (int i = 0; i < testString.length(); i++) {
char someChar = testString.charAt(i);
if (someChar == ' ') {
continue;
}
char ch = testString.charAt(i);
List<Character> characters = map.getOrDefault(Character.toLowerCase(ch), new ArrayList<>());
characters.add(ch);
map.put(Character.toLowerCase(ch), characters);
}
List<Map.Entry<Character, List<Character>>> list = new ArrayList<>(map.entrySet());}
您可以添加sortedList
来保存字符出现的顺序。但我认为输出应为Iinnssttruco
。
public static void main(String[] args) throws IOException {
String testString = " ";
List<Character> sortedList = new ArrayList<>();
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
testString = rd.readLine();
Map<Character, List<Character>> map = new HashMap<>();
for (int i = 0; i < testString.length(); i++) {
char someChar = testString.charAt(i);
if (someChar == ' ') {
continue;
}
char ch = testString.charAt(i);
List<Character> characters = map.getOrDefault(Character.toLowerCase(ch), new ArrayList<>());
if (characters.isEmpty()) {
sortedList.add(Character.toLowerCase(ch));
}
characters.add(ch);
map.put(Character.toLowerCase(ch), characters);
}
//Display result
for (Character keyChar : sortedList) {
for (Character character : map.get(keyChar)) {
System.err.print(character);
}
}
}