每日一题:16. “气球” 的最大数量 (C++)

题目
给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 “balloon”(气球)。
字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 “balloon”。

示例 1:
输入:text = “nlaebolko”
输出:1

示例 2:
输入:text = “loonbalxballpoon”
输出:2

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-number-of-balloons
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:
将所有字母个数记录入数组,循环依次减去目标单词字母,若字母个数小于0则说明无法凑齐一个单词,返回能够拼成单词个数,每次循环结束单词个数加一。
本题解可以范式使用,对于所有目标单词都可以得到拼出个数。

数组代码

class Solution {
public:
    string target = "balloon";//保存目标单词
    int words[26], result = 0, *record;//words记录所有字母个数;result保存拼出单词个数;record保存字母在字母表里对应的下标位置。
    int maxNumberOfBalloons(string text) {
        int lengths = target.length();//保存目标单词长度。
        record = (int*)calloc(lengths, sizeof(int));
        for(int i = 0; i < lengths; i++){record[i] = target[i] - 97;}
        for(auto i : text){words[i - 97]++;}
        while(true){//循环依次减去对应单词字母个数
            for(int i = 0; i < lengths; i ++){
                if(--words[record[i]] < 0){return result;}//字母个数小于0说明无法拼成一个单词,结束循环返回个数
            }
            result ++;//完成一次单词循环,个数加一
        }
        return result;
    }
};

哈希表代码

class Solution {
public:
    string target = "balloon";
    int maxNumberOfBalloons(string text) {
        int result = 0;
        unordered_map<char, int> record;
        for(auto i : text){record[i]++;}
        while(true){
            for(auto i : target){
                if(--record[i] < 0){return result;}
            }
            result ++;
        }
        return result;
    }
};

作者:yi-si-cb
链接:https://leetcode-cn.com/problems/maximum-number-of-balloons/solution/xie-shi-shu-zu-ha-xi-c-by-yi-si-cb-jvgy/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倚肆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值