蓝桥杯 单词分析

本文介绍了一个简单的Java程序,用于从给定的长单词中找出出现频率最高的字母及其出现次数。

题目描述

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

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。

输入描述

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

对于所有的评测用例,输入的单词长度不超过 1000。

输出描述

输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。

第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

提交代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.next();
        int[] last = new int[128];
        int max = 0;
        int zi = 0;
        for(int i = 0; i < 128; i++) {
            last[i] = 0;
        }
        for(int i = 0; i < s.length(); i++) {
            int index = s.charAt(i);
            last[index]++;
            if(max <= last[index]){
              if(max < last[index]){
                max = last[index];
                zi = index;
              }else{
                if(zi > index){
                  zi = index;
                }
              }
            }
        }
        char ret = (char)zi;
        System.out.println(ret);
        System.out.println(max);
        scan.close();
    }
}

解题思路

先用Scanner获取输入,并创建一个长度为128位的数组,用来把字符转换成ASCII码的形式来存进数组中。创建整数max,用来存储出现最多的字母出现的次数。创建zi来存储出现最多的字母的ASCII码。

遍历数组,将每一位都赋值为0。遍历字符串,将当前字母的ASCII码对应的那一个数组中的元素+1。用来表示这个字母出现的次数。每一次加一之后,进行对比,如果max小于last[index],将last[index]赋值给max,并将index赋值给zi。如果max等于last[index],对比zi和index的大小,即当前字母和存储的出现最多的字母哪个更靠前。

代码还有很多可以完善的地方,但是我这个小白的知识储备不允许我继续优化,只能写到这一步了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值