GEM列(接頭辞と最大間隔か否かを判断します)

タイトル説明

ルビーやエメラルドでつなぎ合わせ宝石の文字列は、場合にのみ、ルビーやエメラルドの同じ数、破壊しやすいだけで最も安定した宝石の列、があります。アンは与えられた文字列、安定した宝石の文字列の最長可能傍受、宝石合成数から宝石を疑問に思いました。彼を助けてください。

「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;
}

 

公開された42元の記事 ウォン称賛16 ビュー3408

おすすめ

転載: blog.csdn.net/qq_41542638/article/details/97622042