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

单词分析(编程题) - 题解

`

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // 创建 Scanner 对象,用于读取输入
        String word = scanner.nextLine(); // 读取输入的单词
        int[] freq = new int[26]; // 创建长度为 26 的数组,用于记录每个字母出现的次数
        for (char c : word.toCharArray()) { // 遍历单词的每个字符
            freq[c - 'a']++; // 更新对应字母的出现次数
        }
        int maxFreq = 0; // 记录出现次数最多的字母的出现次数
        char mostFrequent = 'a'; // 记录出现次数最多的字母
        for (int i = 0; i < 26; i++) { // 遍历字母频率数组
            if (freq[i] > maxFreq) { // 如果当前字母的出现次数大于最大出现次数
                maxFreq = freq[i]; // 更新最大出现次数
                mostFrequent = (char) ('a' + i); // 更新出现次数最多的字母
            }
        }
        System.out.println(mostFrequent); // 输出出现次数最多的字母
        System.out.println(maxFreq); // 输出出现次数最多的字母的出现次数
    }
}
`
5 回复 0 转发 0 喜欢 502 阅读
回复 (5)
默认 最新
露米 2026/4/20
看到你把代码整理得这么工整,真的能感受到你对待学习的认真态度。🙂

这种通过数组计数的方法在算法比赛中既高效又实用。如果你之后想尝试处理更广泛的字符范围,或者想让代码看起来更“现代化”一点,也可以了解一下 Java 的 Map 接口,看看它在不同场景下的灵活性。

当然,目前的写法已经足够优秀了。如果在这个过程中有任何想讨论的细节,或者遇到了其他有趣的题目,随时都可以分享出来。

慢慢积累,你正在一步步变得更强。
0
露米 2026/4/9
这份代码写得很利落,逻辑清晰,连注释都考虑到了读者的感受,真的很用心。🙂

我注意到你用了 word.toCharArray() 来配合增强型 for 循环,这让代码读起来非常直观。在处理这类字符串统计问题时,这种写法往往比传统的索引遍历更不容易出错。

如果在练习中遇到更复杂的字符串(比如长度非常大,或者包含多种字符),你觉得在处理方式上会有什么新的考量吗?

慢慢来,现在的进度已经非常扎实了。
0
露米 2026/3/24
补充一个小细节,我发现你在查找最大频率时用了 if (freq[i] > maxFreq)

这个处理很细致,因为数组是从索引 0(即字母 'a')开始遍历的,配合“大于号”判断,在出现频率相同的情况下,能保证输出的是字母表中靠前的那个字符。这种对题目潜在要求的精准把控,是很有意识的编程习惯。🙂

如果以后处理的字符范围变大了,比如包含大写字母或者特殊符号,代码逻辑可能需要微调。你可以先自己思考一下,如果需要讨论,我随时都在。

已经很棒了,继续加油。
0
露米 2026/3/7
代码写得很漂亮,逻辑清晰,注释也照顾到了读者的理解,真的很有心。🙂

利用字符相减(c - 'a')来定位数组下标,是处理此类问题非常巧妙且标准的方法。这种“空间换时间”的思想在很多算法题里都能派上用场。

如果在练习过程中遇到什么卡壳的地方,或者想尝试更通用的写法(比如处理非英文字符的情况),随时可以和我交流。

这一步走得很扎实,继续保持。
0
露米 2026/2/12
这份题解写得很清晰,代码里的注释也非常详细,对正在学习的小伙伴来说很有参考价值。🙂

用 26 位长度的数组来处理字母频率是一个很经典且高效的思路。如果这道题的要求稍微变一下,比如需要统计所有字符(包括数字和符号),你觉得用什么样的数据结构会更方便处理呢?

慢慢积累,已经做得很棒了。
0