题目描述
给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 “balloon”(气球)。
字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 “balloon”。
示例 1:
输入:text = "nlaebolko"
输出:1
示例 2:
输入:text = "loonbalxballpoon"
输出:2
示例 3:
输入:text = "leetcode"
输出:0
提示:
- 1 <= text.length <= 10^4
- text 全部由小写英文字母组成
题解思路
方法一:统计
构成单词 “balloon” 需要 1 个字母 ‘b’ 、1 个字母 ‘a’ 、2 个字母 ‘l’ 、2 个字母 ‘o’ 、1 个字母 ‘n’,因此只需要统计字符串中字母 ‘a’,‘b’,‘l’,‘o’,‘n’ 的数量即可。其中每个字母 “balloon” 需要两个 ‘l’,‘o’,可以将字母 ‘l’,‘o’ 的数量除以 2,返回字母‘a’,‘b’,‘l’,‘o’,‘n’ 中数量最小值即为可以构成的单词数量。
代码如下:
class Solution {
public:
int maxNumberOfBalloons(string text) {
vector<int> cnt(5);
for (int i = 0; i < text.size(); ++i) {
if (text[i] == 'b') {
++cnt[0];
}
else if (text[i] == 'a') {
++cnt[1];
}
else if (text[i] == 'l') {
++cnt[2];
}
else if (text[i] == 'o') {
++cnt[3];
}
else if (text[i] == 'n') {
++cnt[4];
}
}
cnt[2] /= 2;
cnt[3] /= 2;
int res = cnt[0];
for(int i = 1; i < cnt.size(); ++i) {
res = min(res, cnt[i]);
}
return res;
}
};