蓝桥杯寻找出现次数最多的字母

一.问题描述

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

二.问题分析

  首先我们要解决以下几点问题 

 1. 要找出出现最多单词中的字母

 2.找出出现最多字母的次数

 3.如果不同字母出现的次数相同,要按照ASCLL码表中的顺序打印出来

三.问题解决

  代码如下:

package LuoGu;
import java.util.Scanner;
public class Text4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str=sc.next();//用Scanner键盘录入读入一个单词
        int i;
        char ch = 'a';//初始化一下ch的值
        int arr[] = new int[26];// 定义一个整形数组
        for (i = 0; i < str.length(); i++) {
            arr[str.charAt(i) - 'a']++;
        }/*首先说明一下。charAt(i)函数是为了读取字符串中的对应字符,比如说“haxihanshu”。
           那么charAt(0)就对应的是第一个字母'h'*/


        /*'a'对应的ASCLL码表中是97,java中有数据类型转换,所以第一个for循环
        * 就意味着遍历了str这个字符串中的所有字符,这就是str.charAt(i)中的含义,
        * 再减去a对应的ASCLL码,这样就对应着所有字母正好对应着arr数组的数组下标
        * 外围arr[]++意思也就是如果出现相同字母的话那么定义的这个空数组(默认全为0)
        * 里面的数值也就从零开始加次数,意味着arr这个数组里面的数代表了字母出现的次数
         */

        //下面开始找arr数组中最大的数字。也就是字母出现最多的次数以及所对应的字母
        int max = 0;
        for (int j = 0; j < 26; j++) {//遍历arr数组,找出数组中的最大值
            if (max < arr[j]) {
                max = arr[j];
                ch=(char)(j+97);//强制类型转化,此时的j的值就是上面减去'a'之后的数
            }
        }
        System.out.println(ch);
        System.out.println(max);

    }
}

注意ch要赋初始值,第二个for循环中的if()括号里面不能加等号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值