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);
}
}