蓝桥杯真题——单词分析(Java实现)

蓝桥杯系列文章

2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现)

2023第十四届蓝桥杯模拟赛第三期个人题解(Java实现)



单词分析

  • 题目描述

小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。

  • 输入描述

输入一行包含一个单词,单词只由小写英文字母组成。

对于所有的评测用例,输入的单词长度不超过 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();
	}
}


总结

有错误的地方欢迎大家指正!

猜你喜欢

转载自blog.csdn.net/weixin_51627036/article/details/129461463