题目描述
有一种宝石串,由绿宝石和红宝石串成,仅当绿宝石和红宝石数目相同的时候,宝石串才最为稳定,不易断裂。安安想知道从给定的宝石串中,可以截取一段最长的稳定的宝石串,有多少颗宝石组成。请你帮助他。
绿宝石用‘G’表示,红宝石用‘R'表示。
输入格式
一行由G和R组成的字符串
输出格式
最长的稳定的宝石串有多少颗宝石组成
输入/输出例子1
输入:
GRGGRG
输出:
4
样例解释
RGGR为答案。
宝石数<=1000000
代码
#include <bits/stdc++.h>
using namespace std;
int G[1000000],R[1000000],g,r;
char s[1000001];
int c,ans;
int main()
{
scanf("%s",s);
for(int i=0;;i++)
{
if(s[i]=='G')
{
G[i]=1+g;R[i]=r;g=G[i];
}
else if(s[i]=='R')
{
R[i]=1+r;G[i]=g;r=R[i];
}
else
{
break;
}
c++;
}
for(int i=0;i<c;i++)
{
for(int e=i;e<c;e++)
{
if((R[e]-R[i-1])==(G[e]-G[i-1])&&(R[e]-R[i-1]+G[e]-G[i-1])>ans)
{
ans=R[e]-R[i-1]+G[e]-G[i-1];
}
}
}
printf("%d",ans);
return 0;
}