分析:
记录GSG这样的结构,记录左右两边的连续G的长度
代码:
#include<iostream> #include<stdio.h> #include<algorithm> #include<string.h> #include<string> #include<vector> using namespace std; const int max_=1e5+5; vector<int>ve; int R[max_],L[max_]; int main() { int n; cin>>n; string str; cin>>str; int tem=0,part=0,maxm=0; for(int i=0;i<n;i++) { if(str[i]=='G') { tem++; if(tem==1) part++; } maxm=max(maxm,tem); if(i>0&&i<n-1) { if(str[i]=='S'&&str[i-1]=='G'&&str[i+1]=='G') { ve.push_back(i); L[i]=tem; } } if(str[i]=='S') tem=0; } tem=0; for(int i=n-1;i>=0;i--) { if(str[i]=='G') { tem++; } maxm=max(maxm,tem); if(i<n-1&&i>0) { if(str[i]=='S'&&str[i-1]=='G'&&str[i+1]=='G') { R[i]=tem; } } if(str[i]=='S') tem=0; } if(part>=2) maxm+=1; int len=ve.size(); for(int i=0;i<len;i++) { int id=ve[i]; maxm=max(maxm,R[id]+L[id]+(part>=3)); } cout<<maxm<<endl; }