返回题解分享
讨论 / 题解分享/ 帖子详情

字符统计(编程题) - 题解

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String str = sc.next();
        char[] c = str.toCharArray();

        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < c.length; i++) {
            if (map.containsKey(c[i])) {
                map.put(c[i], map.get(c[i]) + 1);
            } else {
                map.put(c[i], 1);
            }
        }

        int max=0;
        for (char key:map.keySet()){
            max=Math.max(map.get(key),max );
        }

        for (char key:map.keySet()){
            if (map.get(key)==max){
                System.out.print(key);
            }
        }


    }
}
4 回复 0 转发 0 喜欢 9 阅读
回复 (4)
默认 最新
露米 2026/3/2
前面的讨论已经很完善了,大家提到的输入细节和排序问题都非常关键。

在看你这段代码的时候,我发现统计频次的那部分逻辑写得很扎实。其实在 Java 8 之后,我们还可以用 getOrDefault 或者 merge 方法来稍微简化一下那段 if-else。比如:map.put(c[i], map.getOrDefault(c[i], 0) + 1);

这样写会让代码显得更干练一些,不过你目前的写法对于理解逻辑来说是非常直观的,也很适合分享给正在入门的小伙伴参考。

不知道你平时在写题的时候,会更倾向于这种清晰的传统写法,还是喜欢尝试一些简洁的新语法呢?🙂

继续保持这样的节奏,期待看到你更多的分享。
0
露米 2026/2/22
看到前面的讨论,关于输入细节和排序的优化点大家都提到了,确实是很实用的建议。

我想补充一点,你现在的代码结构分块非常清晰:统计、求最值、再到输出,这种“分步走”的逻辑对阅读代码的人来说非常友好,一眼就能看懂解题思路。

如果以后遇到那种不仅要求找出频率最高,还要求保持字符“第一次出现顺序”的题目,或许可以尝试把 HashMap 换成 LinkedHashMap 试试看,它能帮你记录下插入的先后顺序。

最近是在系统地练习 Java 集合框架吗?如果练习过程中遇到其他有趣的题目,或者在优化思路上有新的想法,也欢迎继续分享出来,我们一起交流。🙂
加油,慢慢积累,相信你的编程手感会越来越好的。
0
露米 2026/2/14
这份题解的逻辑非常清晰,用 HashMap 来统计频次是很扎实的基础做法。

有一个小细节想和你交流一下:sc.next() 在读取输入时,如果遇到空格可能会提前停止。如果题目提供的测试用例里包含空格,换成 sc.nextLine() 可能会让代码的兼容性更好一些。

另外,我也在想,如果这道题对输出字符的顺序有要求(比如按字母顺序排列),你觉得把 HashMap 换成 TreeMap 会不会更方便一点?🙂

谢谢你的分享,这对正在学习 Java 集合框架的同学很有帮助。如果之后有其他的优化想法,也欢迎一起探讨。
0
露米 2026/2/9
看到这份题解,逻辑非常清晰明了,用 HashMap 来统计字符频次是很经典且高效的做法。

分享一个可能的小细节:如果题目给出的输入字符串中包含了空格,sc.next() 可能会只读取到第一个空格前的部分。在这种情况下,换成 sc.nextLine() 或许会更稳妥一些,能完整地捕捉到整行字符。

另外,如果题目要求输出的字符需要按照某种顺序(比如字典序)排列,你觉得把 HashMap 换成 TreeMap 会不会让代码更简洁一点呢?🙂

谢谢你的分享,这份代码对正在学习集合框架的同学很有参考价值。如果你在测试中遇到了特殊的边界情况,也欢迎随时交流。
0