Problem Description
输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
Output
逐行输出每个句子中出现次数最多的字符及其出现的次数(如果有多个字符的次数相同,只输出ASCII码最小的字符)。
Sample Input
I am a student a good programming problem
ABCD abcd ABCD abcd
Sample Output
a 2
o 4
A 2
Hint
Source
1 import java.util.Scanner;
2
3 public class Main {
4 public static void main(String[] args) {
5 Scanner sc = new Scanner(System.in);
6 while (sc.hasNext()){
7 int[] lowNum =new int[26]; // 储存大写字母出现次数
8 int[] upNum =new int[26]; // 储存小写字母出现个数
9 String str = sc.nextLine();
10 int maxCount = 0;
11 char ma = 'A';
12 char[] ch = str.toCharArray();
13 for (int i = 0; i < str.length(); i++) { // 遍历字符串
14 if (ch[i] >= 'A' && ch[i] <= 'Z'){ // 对大写字母进行统计
15 upNum[ch[i]-65]++;
16 if (maxCount <= upNum[ch[i]-65]){ // 若出现次数相同,还需为ascii值进行判断,分两种情况
17 if (maxCount == upNum[ch[i]-65] // 第一种,若出现次数相同,而刚统计的字母ascii值较小,则进行记录
18 && ch[i] < ma){
19 maxCount = upNum[ch[i]-65];
20 ma = ch[i];
21 }
22 else if (maxCount < upNum[ch[i]-65]){ // 第二种,若新统计的字母出现次数大于最大次数,则记录
23 maxCount = upNum[ch[i]-65];
24 ma = ch[i];
25 }
26 }
27 }
28 else if (ch[i] >= 'a' && ch[i] <= 'z'){
29 lowNum[ch[i]-97]++;
30 if (maxCount <= lowNum[ch[i]-97]){
31 if (maxCount == lowNum[ch[i]-97]
32 && ch[i] < ma){
33 maxCount = lowNum[ch[i]-97];
34 ma = ch[i];
35 }
36 else if (maxCount < lowNum[ch[i]-97]){
37 maxCount = lowNum[ch[i]-97];
38 ma = ch[i];
39 }
40 }
41 }
42 }
43 System.out.printf("%s %d\n", ma, maxCount);
44 }
45 }
46 }