タイトル説明
ルビーやエメラルドでつなぎ合わせ宝石の文字列は、場合にのみ、ルビーやエメラルドの同じ数、破壊しやすいだけで最も安定した宝石の列、があります。アンは与えられた文字列、安定した宝石の文字列の最長可能傍受、宝石合成数から宝石を疑問に思いました。彼を助けてください。
「G」とエメラルドルビーが「R」で表される表します。
入力形式
G及びRからなる彼のストリング
出力フォーマット
からなる宝石の宝石の最も長い文字列は、安定した数
サンプル入力と出力
入力#1コピー
GRGGRG
出力#1コピー
4
説明/ヒント
その答えにRGGR。
宝石数<=1000000
アイデア:
グリーン(値がエンドポイントに等しい)、即ち、その後プレフィックス及び計算は、セクションゼロの要件を満たすための対象である、赤と呼ば-1、+1と呼ばれる区間の両端点の接頭語との差がゼロに等しいです
従って、プレフィックスの各値について、以下のように処理しました。
それが最初に表示されたとき、それが記録されている、または初めてその外観の間隔サイズと値を計算し、最大間隔を更新しよう
#include<iostream>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
int main() {
char str[1000002];
int sum=0,ans=0;
map<int,int> m;m[0]=0; //前缀和的初始为0
cin>>(str+1); //字符串从1开始写入
for(int i=1; i<=strlen(str+1); i++) {
if(str[i]=='G')sum+=1;
else sum-=1;
if(m.find(sum)==m.end())m[sum]=i; //若sum的值为首次出现,则记录该值
else ans=max(ans,i-m[sum]); //尝试更新最大区间
}cout<<ans<<endl;
return 0;
}