#include<bits/stdc++.h>
using namespace std;
int b[2000010], ans, k;
//bi表示的是绿球与红球之间差值为i时的最前的下标
//因为这个差值可能是负数所以就加一个1000000的偏移量
//k表示的是当前前缀的差值,
//如果这个差值在之前出现过就表示从第一次出现的下标到当前这个位置是稳定的
//否则不存在稳定解,并记录一下这个下标为当前差值下的最前坐标
int main(){
string s; cin >> s;
for(int i = 0; i < s.size(); i++){
if(s[i] == 'G') k++;
if(s[i] == 'R') k--;
if(b[k+1000000] != 0){
ans = max(i-b[k+1000000]+1, ans);
}else b[k+1000000] = i+1;
}
cout << ans;
return 0;
}
标签:下标,宝石,int,1000000,P0689,差值,ans
From: https://www.cnblogs.com/Vivian-0918/p/18209121