题目描述
【问题描述】
x 星球有 26 只球队,分别用 a ~ z 的 26 个字母代表。他们总是不停地比赛。
在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。
国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?(当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)
【输入描述】
输入,一个串,表示球队获胜情况(保证串的长度 < 1000)。
【输出描述】
要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。
【输入输出样例】
示例1
输入:
abaabcaa
输出:
4
【运行限制】
• 最大运行时间:1s
• 最大运行内存: 256M
解题代码
C语言
法一
【解题思路】:用数组count记录a~z出现的次数(eg.count[0]为字母a出现的次数)。
#include <stdio.h>
#include <string.h>
int main()
{
int len,i,j,max=1,min=1000;
int count[26]={0};
char str[1000];
gets(str);
// 获取输入的字符串str的长度
len=strlen(str);
// 用count记录a~z出现的次数
for(i=0; i<len; i++){
++count[str[i] - 97];
}
// 寻找最大值与最小值
for(j=0;j<26;j++){
if(count[j]>max){
max = count[j];
}
if(count[j]!=0 && count[j]<min){
min = count[j];
}
}
printf("%d",max-min);
return 0;
}
法二
【解题思路】逐个判断输入的字符串中,每一个字符在字符串中的出现个数,记录最大值与最小值
#include <stdio.h>
#include <string.h>
int main()
{
int len,i,j,k,max=1,min=1000;
char a[1000];
gets(a);
len=strlen(a);
for(i=0; i<len; i++)
{
k=0; //重置字符出现的次数
for(j=0; j<len; j++)
{
if(a[j]==a[i])
{
k++;
}
}
if(k>max)
{
max=k;
}
if(k<min && k!=0)
{
min=k;
}
}
printf("%d",max-min);
return 0;
}
测试用例
测试1
输入:
abcbbcas
输出:
2
测试2
输入:
abbccbcacd
输出:
3