判断一个字符串中特定单词出现的最大个数
LeetCode 刷题 Day 3
题目:给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 “balloon”(气球)。字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 “balloon”。
示例:
输入:text = “nlaebolko”
输出:1
输入:text = “oollpqwa”
输出:0
题目链接:https://leetcode-cn.com/problems/maximum-number-of-balloons/
在LeetCode只需提交核心的函数部分代码即可。
思路:
"balloon"中,字符l,o的个数是b,a,n的2倍。统计b,a,l,o,n的个数后,若出现了5个b,5个a,10个l,10个o,5个n,则"balloon"的个数为2。
短板效应,取其中最少出现的字符个数作为可输出的最大个数。
例如:b,a,l,o,n都出现了,有2个b,1个a,10个l,4个o,3个n。l,o,n的个数虽然很多,但a只有1个,故只有一个”balloon“,最大个数为1。
C语言完整代码:
#include<stdio.h>
#include<string.h>
int maxNumberOfBalloons(char * text)
{
int zimu[6]={0}; //记录text中字符a,b,l,o,n分别出现的次数,初始化为0
int i;
int length;
int count=0;
length=strlen(text); //计算text的长度
for(i=0;i<length;i++)
{
if(text[i]=='a') //统计字符a出现的次数,保存在zimu[0]中,同理记录b,l,o,n的个数
zimu[0]++;
if(text[i]=='b')
zimu[1]++;
if(text[i]=='l')
zimu[2]++;
if(text[i]=='o')
zimu[3]++;
if(text[i]=='n')
zimu[4]++;
}
//统计b,a,l,o,n的个数后,短板效应,取其中最少出现的字符个数作为可输出的最大个数。
zimu[2]=(zimu[2])/2; //l,o的个数变为原来的一半
zimu[3]=(zimu[3])/2;
int first=zimu[0]; //令a的个数等于first
for (int j = 0; j < 5; j++)
{
if(first<zimu[j]) //若a的个数小于其他字符出现的个数,a为最小值
first=first;
if(first>=zimu[j])//若a的个数大于其他字符出现的个数,令first=zimu[j],其他字符的个数为最小值
first=zimu[j];
}
return first;
}
int main()
{
char number[1005];
scanf("%s",&number);
maxNumberOfBalloons(number);
printf("%d\n", maxNumberOfBalloons(number));
}
运行结果: