0
点赞
收藏
分享

微信扫一扫

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

云上笔记 2022-02-13 阅读 54

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

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

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

解题思路:
将所有字母个数记录入数组,循环依次减去目标单词字母,若字母个数小于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;
    }
};
举报

相关推荐

0 条评论