“气球” 的最大数量

题目

给你一个字符串 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;
}
}