“气球” 的最大数量
原创
©著作权归作者所有:来自51CTO博客作者wx58c8fa5d0b356的原创作品,请联系作者获取转载授权,否则将追究法律责任
“气球” 的最大数量
题目
给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 "balloon"(气球)。
字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "balloon"。
示例
示例 1:
输入:text = "nlaebolko"
输出:1
示例 2:
输入:text = "loonbalxballpoon"
输出:2
示例 3:
输入:text = "leetcode"
输出:0
解题
思路
所有的单词都是26个英文字母组成的,单词中的字母都是小写的,a-z在ASCII码表中对应的是97-122,定义一个长度为26的int数组,字符减去97即是该字符在数组中的存储位置<br/>
这样就可以把所有的字符统计出个数,这样做还有一个好处,就是没有出现的字符会默认为0<br/>
因为"balloon"中字符l和o出现了两次,所以我们要把'l'和'o'字符的个数除以2<br/>
最后字符b a l o n出现次数最少的即为所求。
时间复杂度为O(n),空间复杂度为O(1)
代码
class Solution {
public int maxNumberOfBalloons(String text) {
int[] letters = new int[26];
for (char ch : text.toCharArray()) {
letters[ch - 97]++;
}
letters['l' - 97] /= 2;
letters['o' - 97] /= 2;
int ans = Integer.MAX_VALUE;
for (char ch : "balon".toCharArray()) {
if (letters[ch - 97] < ans) {
ans = letters[ch - 97];
}
}
return ans;
}
}