题目链接
题解链接
基础: 二分
- 先从最简单的思路开始
- 首先,题目满足可二分性
- 也就是说,当可以构造出
x
个 "balloon"
串
- 必然,可以构造出
x-1
个 "balloon"
串
- 于是,二分答案
复杂度
- 时间复杂度: \(O(Nlog(N))\)
- 空间复杂度: \(O(1)\)
代码
class Solution {
public:
bool check(string&text,int x){
int b=0,a=0,l=0,o=0,n=0;
for(auto&c:text){
b+=c=='b';
a+=c=='a';
l+=c=='l';
o+=c=='o';
n+=c=='n';
}
return b>=x && a>=x && l/2>=x && o/2>=x && n>=x;
}
int maxNumberOfBalloons(string text) {
int l=0,r=text.size()/strlen("balloon");
int ans=0;
while(l<=r){
int mid=(l+r)>>1;
if(check(text,mid)){
ans=mid;
l=mid+1;
}
else r=mid-1;
}
return ans;
}
};
进阶: 贪心
- 借鉴二分思路的
check()
函数
- 直接计数
- 然后贪心
复杂度
- 时间复杂度: \(O(N)\)
- 空间复杂度: \(O(1)\)
代码
class Solution {
public:
int maxNumberOfBalloons(string text) {
int b=0,a=0,l=0,o=0,n=0;
for(auto&c:text){
b+=c=='b';
a+=c=='a';
l+=c=='l';
o+=c=='o';
n+=c=='n';
}
auto x=min(b,a);
auto y=min(x,n);
auto z=min(l,o)/2;
return min(y,z);
}
};