是一个前缀和的题目,先求出绿宝石(红的也行)的前缀和,再for循环一遍即可。
#include<iostream>
#include<cstdio>#include<cmath>
#include<cstring>
#include<string>
using namespace std;
int dis[1000001],maxx;
string a;
int main()
{
cin>>a;
int l=a.size()-1;//宝石串长度。
for(int i=0;i<=l;++i)
{
if(a[i]=='G')
dis[i]=dis[i-1]+1;
else dis[i]=dis[i-1];
}//求前缀和。
for(int i=0;i<=l;++i)
{
for(int j=i;j>=0;--j)
{
if(a[j]=='G')//注意,如果是G就要再加上1。
{
if((dis[i]-dis[j]+1)*2==(i-j+1))
{
maxx=max(maxx,i-j+1);//取最大。
}
}
else
{
if((dis[i]-dis[j])*2==(i-j+1))
{
maxx=max(maxx,i-j+1);
}
}
}
}
cout<<maxx;
return 0;
}