判断一个字符串中特定单词出现的最大个数

判断一个字符串中特定单词出现的最大个数

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

运行结果
在这里插入图片描述
在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值