第二题,我一眼就知道是二分了,但是我***兮兮的把l=m+1,r=m-1写成了l=l+1;r=r-1;关键是列子并不能给我错误提示,害得我想了半天都写不对,气死啦
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param x string字符串
* @return int整型
*/
int check(int x,string s)
//假如x=2,字符串为aacbbcba我们只需要看字符串里面是不是含有aabbcc,
// 当然得按顺序来,显然当前字符串不满足。那么x=2,大了,缩小枚举范围
{
int k=3*x;
int a=0;
int b=0;
int c=0;
int i=0;
while(i<s.length())
{
if(s[i]=='a')
a++;
i++;
if(a==x)
break;
}
while(i<s.length())
{
if(s[i]=='b')
b++;
i++;
if(b==x)
break;
}
while(i<s.length())
{
if(s[i]=='c')
c++;
i++;
if(c==x)
break;
}
if(a+b+c>=k)
return 1;
return 0;
}
int Maximumlength(string x) {
int n = x.size();
int l = 0,r = n;//枚举的上下界
while(l<=r){
int m=(l+r)>>1;
if(check(m,x)){
l = m+1;//当前枚举的值满足条件,那么我们就试探着看,能不能找到更大的值
}
else r = m-1;//否则看小的值能不能满足
}
return 3*(l-1);
}
};


京公网安备 11010502036488号