题目:
给你一个字符串 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/