leetcode-“气球” 的最大数量

题目描述

给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 “balloon”(气球)。

字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 “balloon”。

示例 1:

1
2
输入:text = "nlaebolko"
输出:1

示例 2:

1
2
输入:text = "loonbalxballpoon"
输出:2

示例 3:

1
2
输入:text = "leetcode"
输出:0

提示:
1 <= text.length <= 10^4
text 全部由小写英文字母组成

方法一:字母计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int maxNumberOfBalloons(String text) {
int ans = 10000;String began = "balloon";
int [] arr = new int [26];
char [] textCharArr = text.toCharArray();
for (int i = 0; i < textCharArr.length; i++){
arr[textCharArr[i]-'a']++;
}
arr['l' - 'a'] = arr['l' - 'a']/2;//因为气球单词中l为两个,因此除2减半
arr['o' - 'a'] = arr['o' - 'a']/2; //因为气球单词中o为两个,因此除2减半
int [] arrNew = new int [7];
for (int i = 0; i < arrNew.length; i++){
arrNew[i] = arr[began.charAt(i) - 'a'];
}
for (int i = 0; i < arrNew.length; i++){
ans = Math.min(ans,arrNew[i]);
}
return ans;
}
}
  • 执行用时 :1 ms, 在所有 java 提交中击败了100.00%的用户
  • 内存消耗 :37.5 MB, 在所有 java 提交中击败了100.00%的用户

方法二:正则计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public static int maxNumberOfBalloons(String text) {
int maxCount = text.length();
String[] regexs = new String[]{"b", "a", "l", "o", "n"};
for (String regex : regexs) {
Matcher matcher = Pattern.compile(regex).matcher(text);

int count =0;
while(matcher.find()){
count++;
}
if (regex.equals("o") || regex.equals("l")) {
count /= 2;
}
maxCount = Math.min(maxCount, count);
}
return maxCount;
}
}
  • 执行用时 :8 ms, 在所有 java 提交中击败了35.31%的用户
  • 内存消耗 :36.8 MB, 在所有 java 提交中击败了100.00%的用户

方法三:替换

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public int maxNumberOfBalloons(String text) {
int b = text.length() - text.replace("b", "").length();
int a = text.length() - text.replace("a", "").length();
int l = (text.length() - text.replace("l", "").length())/2;
int o = (text.length() - text.replace("o", "").length())/2;
int n = text.length() - text.replace("n", "").length();
int [] arr = new int[]{b,a,l,o,n};
Arrays.sort(arr);
return arr[0];
}
}
  • 执行用时 :14 ms, 在所有 java 提交中击败了19.70%的用户
  • 内存消耗 :36.7 MB, 在所有 java 提交中击败了100.00%的用户