蓝桥杯系列文章
单词分析
- 题目描述
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。
- 输入描述
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过 1000。
- 输出描述
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
- 输入输出样例
输入
lanqiao
输出
a 2
输入
longlonglongistoolong
输出
o
6
思路1 巧用26个小写字母的ASCII码
使用一个整型数组“存储”26个小写字母,下标0-26分别对应a-z,利用这个数组就可以存储每个小写字母的出现次数,并且已经按字典顺序排好,只需从前往后遍历,第一个最大的值对应出现次数最多的字母。
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
String str=scan.next();
int[] a=new int[26]; //记录26个小写字母出现次数
for(int i=0;i<26;i++) {
//下标0-26对应26个小写字母,元素值对应该字母出现次数
a[str.charAt(i)-'a']++;
}
int max=0; //记录最多的出现次数
char moreChar='a'; //记录出现次数最多的字母
for(int i=0;i<26;i++) {
if(a[i]>max) {
moreChar=(char)('a'+i);
max=a[i];
}
}
System.out.println(moreChar);
System.out.println(max);
scan.close();
}
}
思路2 暴力统计+HashMap排序
利用双层for循环统计每个字母出现的次数,存入hashMap中,然后转为List,通过Collection.sort()按value排序,排序后的List第一项就是出现次数最多的字母及其次数。
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
String str=scan.next();
Map<Character,Integer> map=new HashMap<Character,Integer>();
for(int i=0;i<str.length();i++){
int count=0; //记录每个字母出现次数
for(int j=0;j<str.length();j++){
if(str.charAt(i)==str.charAt(j))
count++;
}
int maxCount=0; //出现最多的次数
char moreChar; //出现次数最多的字母
if(count>=maxCount) {
moreChar=str.charAt(i);
}
map.put(str.charAt(i),count); //将每个字母及其出现的次数存入map
}
//按value排序
List<Map.Entry<Character,Integer>> list=new ArrayList(map.entrySet());//转换为List
Collections.sort(list,(o1,o2)->(o2.getValue().compareTo(o1.getValue())));//排序
// System.out.println("排序前:"+map);
// System.out.println("排序后:"+list);
//取出list第一项,即为出现次数最多的字母及其次数
System.out.println(list.get(0).getKey());
System.out.println(list.get(0).getValue());
scan.close();
}
}
总结
有错误的地方欢迎大家指正!