1189. “气球” 的最大数量
题目描述:
给你一个字符串 text
,你需要使用 text
中的字母来拼凑尽可能多的单词 “balloon”(气球)。
字符串 text
中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 “balloon”。
示例 1:
输入:text = "nlaebolko"
输出:1
示例 2:
输入:text = "loonbalxballpoon"
输出:2
示例 3:
输入:text = "leetcode"
输出:0
提示:
1 <= text.length <= 10^4
text
全部由小写英文字母组成
解题分析及思路:
方法:计数 + 哈希表
思路:
统计 balloon
中每个字母 b
、a
、l
、o
、n
在 text 字符中出现的次数,随后计算每个字母的能凑成一个完整的 balloon
单词所需要的个数,最后取最小值即可。
balloon
中有 l
、o
出现过两次,所以最后结果除以2即可。
此外,可以用一个哈希表来保存每个字母在 count
数组中的下标
var m = map[byte]int{
'b': 0,
'a': 1,
'l': 2,
'o': 3,
'n': 4,
}
func maxNumberOfBalloons(text string) int {
count := make([]int, 5)
for i := 0; i < len(text); i++ {
if index, ok := m[text[i]]; ok {
count[index]++
}
}
count[2] /= 2
count[3] /= 2
var max = count[0]
for index := range count {
if count[index] < max {
max = count[index]
}
}
return max
}
复杂度:
- 时间复杂度:O(N)
- 空间复杂度:O(1)
执行结果:
- 执行耗时:2 ms,击败了33.33% 的Go用户
- 内存消耗:2.3 MB,击败了76.92% 的Go用户