请编写程序,找出一段给定文字中出现最频繁的那个英文字母。
输入格式:
输入在一行中给出一个长度不超过1000的字符串。字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束(回车不算在内)。
输出格式:
在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。
输入样例:
This is a simple TEST. There ARE numbers and other symbols 1&2&3...........
输出样例:
e 7
1 package com.hone.basical; 2 3 import java.util.Scanner; 4 5 /** 6 * 原题目:https://www.patest.cn/contests/pat-b-practise/1039 7 * @author Xia 8 * 思路:首先处理题目中的条件 9 * (1)不区分大小写字母,则可以利用toLowerCase()将字符中所有的大写字母都转化为小写 10 * (2)可以先去掉空格的字符(利用正则表达式来实现) 11 * (3)方法:默认第一个字符为出现次数最多的字符,然后用后面的字符与他做比较,如果字符个数大于 12 * 当前字符,则继续判断是否为小写字母,如果满足,则将字符替换,以及字符次数替换。 13 * 如果字符次数相同,则比较当前字符出现的次数和max的大小,然后再做替换。 14 */ 15 16 public class basicalLevel1042charCount { 17 public static void main(String[] args) { 18 Scanner in = new Scanner(System.in); 19 //定义一个数组用于存储 20 String content = in.nextLine(); 21 int max = 0; //定义最多字符个数 22 char maxchar = 0; //定义最多字符 23 content = content.replaceAll("\s+", ""); //去掉空白字符,制表符 24 content = content.toLowerCase(); 25 int[] a = new int[300]; 26 for (int i = 0; i < content.length(); i++) { 27 a[content.charAt(i)]++; //这里仍然采取前面多次使用的(将读入的数作为下标) 28 if ((a[content.charAt(i)] > max)&&(content.charAt(i)>=97&&content.charAt(i)<=122)) { 29 max = a[content.charAt(i)]; 30 maxchar = content.charAt(i); 31 } 32 //这里用一个if判断让其输出并且的时候最小的字符 33 if ((a[content.charAt(i)] == max)&&(content.charAt(i)>=97&&content.charAt(i)<=122)) { 34 if (content.charAt(i)<maxchar) { 35 max = a[content.charAt(i)]; 36 maxchar = content.charAt(i); 37 } 38 } 39 } 40 System.out.println(maxchar+" "+max); 41 } 42 }