
思路:根据题目模拟即可。先统计text中与单词balloon相关的字符数量,由于一个单词需要消耗两个l和o字符,对其统计数量进行除2向下取整,然后所有字符的最小出现次数即是能够凑成balloon的最大数量。
复杂度分析:
1.时间复杂度:假如C为目标字符串的字符种类数量,本题中C = 5,统计text的词频复杂度为O(n),计算答案的复杂度为O(C),因此整体的复杂度为O(n + C)。
2.空间复杂度:O(C)。
附代码:
java
class Solution {
public int maxNumberOfBalloons(String text) {
int[] cnt = new int[5];
for(int i = 0;i < text.length();i++){
char c = text.charAt(i);
if(c == 'b') cnt[0]++;
else if(c == 'a') cnt[1]++;
else if(c == 'l') cnt[2]++;
else if(c == 'o') cnt[3]++;
else if(c == 'n') cnt[4]++;
}
cnt[2] /= 2;
cnt[3] /= 2;
int ans = cnt[0];
for(int i = 0;i < 5;i++){
ans = Math.min(ans,cnt[i]);
}
return ans;
}
}
ACM模式:
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine();
Solution solution = new Solution();
int result = solution.maxNumberOfBalloons(text);
System.out.println(result);
scanner.close();
}
}
class Solution {
public int maxNumberOfBalloons(String text) {
int[] cnt = new int[5];
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (c == 'b') cnt[0]++;
else if (c == 'a') cnt[1]++;
else if (c == 'l') cnt[2]++;
else if (c == 'o') cnt[3]++;
else if (c == 'n') cnt[4]++;
}
cnt[2] /= 2;
cnt[3] /= 2;
int ans = cnt[0];
for (int i = 0; i < 5; i++) {
ans = Math.min(ans, cnt[i]);
}
return ans;
}
}