问题描述
x星球有26只球队,分别用 a ~ z 的26个字母代表。他们总是不停地比赛。在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?(当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)输入格式一个串,表示球队获胜情况(保证串的长度<1000)输出格式要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次?
样例输入1
abaabcaa
样例输出1
4
提示
a 出现 5 次,最多;c 出现1次,最少。5 - 1 = 4
样例输入2
bbccccddaaaacccc
样例输出2
6
提示
8-2=6
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
int cnt[26];//计数器初始化为00000~000
char a[N];
char b[27] = {"abcdefghijklmnopqrstuvwxyz"};
int main()
{
cin >> a;//主角登场
//接下来两个for循环,用来遍历a中出现的字符与b中出现的字符进行匹配
for (int i = 0; i < 26; i ++)
for (int j = 0; a[j]; j ++) // 字符串数组以 '\0' 结尾,可用作循环结束标志
if(b[i] == a[j]) cnt[i] ++;//匹配成功,计数器对应位置就+1
//最大值初始化为0,最小值初始化为一个很大的数,是惯用伎俩,这样的话,会让第一个满足条件的cnt放入minn与maxn中。
int maxn = 0, minn = 1000;
//这个for循环用来遍历计数器中的所有位置
for (int i = 0; i < 26; i ++)
if(cnt[i]) // 排除一次都没有获胜的队伍
{//如果对应位置不为0,就选出最大,最小值
maxn = max(maxn, cnt[i]);
minn = min(minn, cnt[i]);
}
cout << maxn - minn << endl;
return 0;
}