题目描述
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。
输入描述
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过 1000。
输出描述
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
示例 1
输入
lanqiao
输出
a
2
示例 2
输入
longlonglongistoolong
输出
o
6
题解
普通解法
import java.util.*;
public class day01 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s1=sc.next();
char[] ch1=s1.toCharArray();
//用ch2来表示26个字母,例如0表示‘a’,ch2[0]表示字母a出现的次数;
char[] ch2=new char[26];
//对ch2初始化,保证每个字母出现次数为0
for (int i = 0; i < ch2.length; i++) {
ch2[i]=0;
}
//将ch1中出现的字母依次放入ch2中
//ch1[i]-'a'表示字母的位置,++ch2[ch1[i]-'a']出现了一次加一
for (int i = 0; i < ch1.length; i++) {
++ch2[ch1[i]-'a'];
}
//输出
int max=0;
char c='a';
for (int i = 0; i < ch2.length; i++) {
if(ch2[i]>max) {
max=ch2[i];
c=(char) ('a'+i);
}
}
System.out.println(c);
System.out.println(max);
}
}
测试用例通过
其他解法
用sort()方法对字符进行排序,这里需要注意sum开始时就是1,如果他与下一个字符相等,那么就意味着这个字符数量为2。
例如:输入:lanqiaobeibisaiwn
排序完:ch=[a, a, a, b, b, e, i, i, i, i, l, n, n, o, q, s, w]
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
static Scanner sc=new Scanner(System.in);
public static void main(String[] args) {
String s=sc.next();
char[] ch=s.toCharArray();
sc.close();
Arrays.sort(ch);
int sum=1;
int max=0;
List<Character> list=new ArrayList<>();
for (int i = 0; i < ch.length-1; i++) {
if (ch[i]==ch[i+1]) {
sum++;
}else {
sum=1;
}
if (sum>max) {
list.clear();
max=sum;
list.add(ch[i]);
}
}
System.out.println(list.get(0));
System.out.println(max);
}
}
测试用例通过