题目描述
x星球有26只球队,分别用a~z的26个字母代表。他们总是不停地比赛。
在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。
国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?
输入
输入存在多组数据,对于每组数据:
输入一行包含一个串,表示球队获胜情况(保证串的长度<1000)
输出
对于每组数据:输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。
样例输入
abaabcaa
bbccccddaaaacccc
样例输出
4
6
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
string a;
const int N = 30;
int cnt[N];
bool st[N];int main() {while (cin >> a) {memset(cnt, 0, sizeof(cnt));for (int i = 0; i < a.size(); i++) {cnt[a[i] - 'a']++;st[a[i] - 'a'] = true;}int minv = 200;int maxv = -1;for (int i = 0; i < 26; i++) {if (st[i]) {maxv = max(cnt[i], maxv);minv = min(minv, cnt[i]);}}cout << maxv - minv << endl;}return 0;
}
map容器写法代码如下:
#include <iostream>
#include <map>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;int main() {string a;while (cin >> a) {map<char, int>mp;int len = a.length();for (int i = 0; i < len; i++) {mp[a[i]]++;}int maxv = -1, minv = 999999;for (int i = 0; i < len; i++) {maxv = max(maxv, mp[a[i]]);minv = min(minv, mp[a[i]]);}cout << maxv - minv << endl;}return 0;
}