【资源限制】
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
【问题描述】
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。
【输入格式】
输入一行包含一个单词,单词只由小写英文字母组成。
【输出格式】
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
【样例输入】
lanqiaobei
【样例输出】
a
2
【样例输入】
longlonglongistoolong
【样例输出】
o
6
【评测用例与约定】
对于所有的评测用例,输入的单词长度不超过1000。
【思路与分析】
将输入的字符串转换为字符数组,因题目限定其内容全为“小写字母”,进而直接对转换后的字符数组进行排序。将相同的字母都放在一起,每个字母都计数,并使用max存储。若后续有字母重复数大于前字母,进行替换。若相同,则不进行替换,满足题目中“输出字典序最小”的要求。这道题没什么说法,还是较为简单的一道题。
当然,也可以单独创建一个一维int数组,存储每个字母的值。分别获取,分别计数。最后围绕int数组进行计算。
【代码:最简版】(推荐)
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.next();
char c[]=str.toCharArray();
Arrays.sort(c);
//特值判断
if (c.length==1) {
System.out.println(c[0]);
System.out.println(1);
return ;
}
int sum=1; //sum代表有几个重复数
int max=1; //max代表重复数的个数(最大值)
char result=c[0]; //result代表答案,起始位在第一个数
for (int i=1;i<c.length;i++) {
if (c[i]==c[i-1]) sum++;
else sum=1;
if (sum>max) {
max=sum;
result=c[i];
}
}
System.out.println(result);
System.out.println(max);
}
}
【代码:暴力改良版】
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.next();
int[] ziMu = new int[26];
for(int i=0; i<ziMu.length; i++){
ziMu[i] = 0;
}
char[] c = str.toCharArray();
for(int i=0; i<c.length; i++){
int temp = c[i]-'a';
ziMu[temp]++;
}
int max = ziMu[0];
int index=0;
for(int i=0; i<ziMu.length; i++){
if(ziMu[i]>max){
max = ziMu[i];
index=i;
}
}
System.out.println(max);
System.out.println('a'+index);
}
}
【代码:老实人版】(纯整活)
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.next();
int[] ziMu = new int[26];
for(int i=0; i<ziMu.length; i++){
ziMu[i] = 0;
}
for(int i=0; i<str.length(); i++){
switch(str.charAt(i)){
case 'a':{
ziMu[0]++;
break;
}
case 'b':{
ziMu[1]++;
break;
}
case 'c':{
ziMu[2]++;
break;
}
case 'd':{
ziMu[3]++;
break;
}
case 'e':{
ziMu[4]++;
break;
}
case 'f':{
ziMu[5]++;
break;
}
case 'g':{
ziMu[6]++;
break;
}
case 'h':{
ziMu[7]++;
break;
}
case 'i':{
ziMu[8]++;
break;
}
case 'j':{
ziMu[9]++;
break;
}
case 'k':{
ziMu[10]++;
break;
}
case 'l':{
ziMu[11]++;
break;
}
case 'm':{
ziMu[12]++;
break;
}
case 'n':{
ziMu[13]++;
break;
}
case 'o':{
ziMu[14]++;
break;
}
case 'p':{
ziMu[15]++;
break;
}
case 'q':{
ziMu[16]++;
break;
}
case 'r':{
ziMu[17]++;
break;
}
case 's':{
ziMu[18]++;
break;
}
case 't':{
ziMu[19]++;
break;
}
case 'u':{
ziMu[20]++;
break;
}
case 'v':{
ziMu[21]++;
break;
}
case 'w':{
ziMu[22]++;
break;
}
case 'x':{
ziMu[23]++;
break;
}
case 'y':{
ziMu[24]++;
break;
}
case 'z':{
ziMu[25]++;
break;
}
}
}
int max = 0;
for(int i=0; i<ziMu.length; i++){
if(ziMu[i]>max){
max = ziMu[i];
}
}
for(int i=0; i<ziMu.length; i++){
if(ziMu[i]==max){
System.out.println('a'+ziMu[i]);
System.out.println(""+i+1);
}
}
}
}