2022年第十三届蓝桥杯JAVA B组 试题C:字符统计
试题 C: 字符统计
时间限制: 1.0s 内存限制: 512.0MB 本题总分:10 分
【问题描述】
给定一个只包含大写字母的字符串 S,请你输出其中出现次数最多的字母。
如果有多个字母均出现了最多次,按字母表顺序依次输出所有这些字母。
【输入格式】
一个只包含大写字母的字符串 S .
【输出格式】
若干个大写字母,代表答案。
【样例输入】
BABBACAC
【样例输出】
AB
【评测用例规模与约定】
对于 100% 的评测用例,1 ≤ |S | ≤ 10的6次方
这里 仅以自己笨拙的方法解一下这道题,对于评测10的6次方不敢保证在时间、空间限制之内。
思路分析
//第1步.存次数
// 可以选择 数组arr 来存大写字母出现的次数
// 1.1 将String -> char[] 然后遍历char[]
// 1.2 利用char类型做运算会自动升为int类型
// 即 'B' - 'A' = 66 - 65 =1
// 就可以用 数组 来存大写字母出现的次数
// 即c[0] 存A出现的次数 、c[1] 存B出现的次数
// 第1步做完,可以验证代码
//第2步.找最多次数
// 这里不仅最高次数 重要的是找arr 的哪个元素是出现次数最高的
// 如arr[0] 是数组最大值 那就输出‘A’
// 这里两个for循环遍历arr
// 第一个for循环 找出最大出现次数max
// 第二个for循环 判断arr[i]==max 这样可以 按字母表顺序依次输出所有这些字母
// 若等于 就输出 (char)('A'+i)
package lanqiao13;
import java.util.Scanner;
/**
* 杨亚磊
* 试题 C: 字符统计
* 时间限制: 1.0s 内存限制: 512.0MB 本题总分:10 分
* 【问题描述】
* 给定一个只包含大写字母的字符串 S,请你输出其中出现次数最多的字母。
* 如果有多个字母均出现了最多次,按字母表顺序依次输出所有这些字母。
* 【输入格式】
* 一个只包含大写字母的字符串 S .
* 【输出格式】
* 若干个大写字母,代表答案。
* 【样例输入】
* BABBACAC
* 【样例输出】
* AB
* 【评测用例规模与约定】
* 对于 100% 的评测用例,1 ≤ |S | ≤ 10的6次方
*/
public class C {
//思路分析
//第1步.存次数
// 可以选择 数组arr 来存大写字母出现的次数
// 1.1 将String -> char[] 然后遍历char[]
// 1.2 利用char类型做运算会自动升为int类型
// 即 'B' - 'A' = 66 - 65 =1
// 就可以用 数组 来存大写字母出现的次数
// 即c[0] 存A出现的次数 、c[1] 存B出现的次数
// 第1步做完,可以验证代码
//第2步.找最多次数
// 这里不仅最高次数 重要的是找arr 的哪个元素是出现次数最高的
// 如arr[0] 是数组最大值 那就输出‘A’
// 这里两个for循环遍历arr
// 第一个for循环 找出最大出现次数max
// 第二个for循环 判断arr[i]==max
// 若等于 就输出 (char)('A'+i)
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//接收 只包含大写字母的字符串 S
String S = scanner.next();
//记录运行时间
long now = System.currentTimeMillis();
//将String S转为 char[] c
char[] c = S.toCharArray();
//1.定义一个长度为26的数组
int[] arr = new int[26];
for (int i = 0; i < c.length; i++) {
arr[c[i] - 'A']++;
}
// 第1步做完,可以验证代码
//System.out.println(Arrays.toString(arr));
//找出最大出现次数max
int max = arr[0];
for(int i = 1;i < arr.length;++i) {
if(arr[i] > max) {
max = arr[i];
}
}
//判断arr[i]==max
// 若等于 就输出 (char)('A'+i)
for (int i = 0; i < arr.length; i++) {
if(max == arr[i]) {
//不要换行 需要强转为char
System.out.print((char)('A'+i));
}
}
//做完再多运行几次检查检查代码
//好不容易写出来,要保证多的分
//输出运行时间
//System.out.println("运行时间"+(System.currentTimeMillis()-now)+ "ms");
}
}
谢谢观看,后续有更好的方法再 补充。