蓝桥杯:次数差

x 星球有 26 只球队,分别用 a ~ z 的 26 个字母代表。他们总是不停地比赛。

在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。

国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?(当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)

输入描述

输入,一个串,表示球队获胜情况(保证串的长度 < 1000)。

输出描述

要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。

样例">输入输出样例

示例

输入

abaabcaa

输出

4

分析:

        使用Map的键值对映射,一个Key对应一个Value,也就是一个字符对应它的出现次数,通过遍历字符串,往Map中添加字符和出现次数,然后通过Key遍历Map,拿到出现Max和Min,相减即可。

Java:

        

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        //拿数据
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        scan.close();

        //使用map记录每一个数字出现的次数,然后通过Key去遍历其中的最大值和最小值
        Map<Character,Integer> map = new HashMap<>();

        //遍历字符串
        for(char c : str.toCharArray()){
          //初始出现次数为1,
          int index = 1;

          //寻找key里面是否有这个字符,如果有,取出它的value,自增,在放回去,这样出现次数就+1了
          if(map.containsKey(c)){
            index = map.get(c);
            index++;
            map.put(c,index);
          }else{
            //如果没有出现过,直接添加到map里面
            map.put(c,index);
          }
        }

        //添加完字符串里面的数据进map,就通过Key来遍历map,拿到value的最大值和最小值
        Set<Character> key = map.keySet();

        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;

        for(char c : key){

          if(map.get(c)>max){
            //更新最大值
            max = map.get(c);
          }

          if(map.get(c)<min){
            //更新最小值
            min = map.get(c);
          }

        }

        System.out.println(max-min);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值