Frequency(频率)
时间限制:2s 内存限制:1024MB
【原题地址】
【问题描述】
给你一个由小写英文字母组成的字符串 S 。请找出在 S 中出现频率最高的字符。如果存在多个这样的字符,请报告按字母顺序排列最早的那个。
【输入格式】
输入内容由标准输入法提供,格式如下
S
1≤∣S∣≤1000 (∣S∣是字符串 S 的长度。)
S 中的每个字符都是小写英文字母。
【输出格式】
在 S 中出现频率最高的字符中,按字母顺序打印最早出现的字符。
【样例输入】
样例一、
frequency
样例二、
atcoder
【样例输出】
样例一、
e
样例二、
a
【样例说明】
对于第一个测试用例,在 frequency 中,字母 e 出现了两次,比任何其他字符都多,因此应该打印 e。
对于第二个 测试用例,在 atcoder 中,每个字母 a、t、c、o、d、e 和 r 都出现一次,因此应按字母顺序打印最早的字母,即 a。
【解题思路】
老汉使用到的是暴力枚举的解题方式
本题是求字符串 s 中出现频率最高且在字母表中顺序较早的字母
通过遍历字符串,用数组下标做字母标记,记录出现次数,记录完之后,遍历记录数组,找出频率最高,且顺序较早的字母。
又水了一篇文章,希望各位能谅解。
代码注释有详细过程
【代码】
package ABC338_B_Frequency;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.next();
// 定义数组count,记录下标对应字母的出现次数
int[] count = new int['z' + 1];
// 遍历s,获取出现次数
for (char c : s.toCharArray()) {
count[c]++;
}
// max_cr存放出现次数最多且字母顺序最早的字母,初始化为a
char max_cr = 'a';
// 遍历count数组,求得最终答案
for (int i = 'b'; i <= 'z'; i++) {
// 为了保证字母顺序最早,只有在大于它时才进行取值
if (count[i] > count[max_cr]) {
max_cr = (char) i;
}
}
// 输出答案
System.out.println(max_cr);
scan.close();
}
}