java - 如何根据与 Java 7 兼容的出现顺序对单词的字母进行排序?
问题描述
我需要打印单词中出现的所有字母,重新排列以便在开头找到最常出现的字母。
单词最多可包含 100,000 个字符。
如果存在出现次数相同的字母,则按字母排序后,将首先显示最小的字母。
Java 中的一些类和操作很慢。为此,建议使用 BufferedReader 和 BufferedWriter。
使用 String 连接很慢。
输入:指令
输出:innssttcour
public class Main {
public static void main(String[] args) throws IOException {
String line;
BufferedReader reader = new BufferedReader(new
InputStreamReader(System.in));
line = reader.readLine();
StringBuilder sb = new StringBuilder();
Map<Character, Integer> charCountMap = new HashMap<>();
int len = line.length();
for(int i = 0; i < len; i++) {
char ch = line.charAt(i);
charCountMap.put(ch, charCountMap.getOrDefault(ch, 0) + 1);
}
charCountMap.entrySet().stream()
.sorted(Map.Entry.<Character,
Integer>comparingByValue().reversed())
.forEach(record -> {
Character key = record.getKey();
int value = record.getValue();
for(int i = 0; i < value; i++) {
sb.append(key);
}
});
sb.toString();
System.out.println(sb);
}
}
我的第二个解决方案工作太慢。
public class Main {
public static void main(String[] args) throws IOException {
String inputString;
BufferedReader reader = new BufferedReader(new
InputStreamReader(System.in));
inputString = reader.readLine();
if(reader != null)
reader.close();
int[] letterArray = new int[26];
char[] letters = new char[26];
for(int i=0;i<=25;i++)
letters[i] = (char)(97+i);
for(int i=0; i< inputString.length(); i++)
letterArray[inputString.charAt(i) - 97] +=1 ;
for(int i=0; i<=24;i++)
for(int j=i+1;j<=25;j++){
if(letterArray[i] <letterArray[j] || (letterArray[i] ==
letterArray[j] && letters[i] > letters[j])){
int temp = letterArray[i];
letterArray[i] = letterArray[j];
letterArray[j] = temp;
char temp2;
temp2 = letters[i];
letters[i] = letters[j];
letters[j] = temp2;}
}
String outputString = new String();
for(int i=0;i<=25;i++){
for(int j = 0; j<letterArray[i]; j++)
outputString += letters[i];}
System.out.println(outputString);}
}
解决方案
你快到了。需要按反转的值对 Map 进行排序,然后按键排序。
推荐阅读
- azure-machine-learning-studio - Azure 机器学习在运行管道时抛出错误“无效图:节点中的计算目标无效”
- javascript - 是否可以在 next.js api 中运行 Mongoose?
- java - 在当前项目中找不到前缀“依赖”的插件
- database - 如何让存储过程等到所有提交作业完成?
- apache-poi - org.apache.poi:POIFSFileSystem 不可分配给 Linux 上新的新 HSSFWorkbook() 上的 NPOIFSFileSystem
- c - 清除 Rust 中的结构数组
- excel - 复制,但只粘贴值?
- javascript - 收到错误没有这样的文件或目录,打开“rds-combined-ca-bundle.pem”
- mysql - mysql如何根据用户上次访问该地点的时间检查时间间隔?
- php - 将graphql的返回值保存在php变量中