题意:给出一个字符串 只有G和S  可以交换任意两个位置的字符一次 问 最长的G的长度是多少

思路:预处理字符串 把相同的G粘成一个G 记一下数量  字符串变为 GSSGSGGSGSSG 相邻有一个S的即可粘在一起

这里要考虑字符串中有多少个部分G   假设有zz部分  如果zz 大于等于3 那么两个G移动后连在一起就是  num[i]+num[j]+1 如果ZZ只有2  那就是 num[j]+num[i]

这里要考虑初始化  初始化如果zz>=2  则初始化成 num[i]+1 否则就初始化成num[i]  (不然会WA13 别问我为什么知道的)

 #include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+;
char s[maxn],s2[maxn];
int num[maxn];
int main(){
int len;
scanf("%d",&len);
scanf("%s",s+);
//len=strlen(s+1);
int flag=;
int zz=;
int ans=;
for(int i=;i<=len;i++){
if(s[i]=='G'){
int cnt=;
while(cnt<=len&&s[i]=='G'){
cnt++;
i++;
}
zz++;
s2[flag]='G';
num[flag++]=cnt;
i--;
}
else {
s2[flag++]='S';
}
}
//for(int i=1;i<=flag-1;i++){
//cout<<s2[i]<<" "<<num[i]<<endl;
// } for(int i=;i<=flag-;i++){
if(zz<=)
ans=max(ans,num[i]);
else ans=max(ans,num[i]+);
if(i>=&&s2[i]=='G'&&s2[i-]=='S'&&s2[i-]=='G'){
if(zz>=)
ans=max(ans,num[i]+num[i-]+);
else ans=max(ans,num[i]+num[i-]);
}
}
cout<<ans<<endl;
return ;
}

最新文章

  1. Vue组件之自定义表单组件
  2. Chrome开发者工具详解(3)-Timeline面板
  3. js简易函数性能测试器
  4. poj3592 强连通+记忆化搜索
  5. RDLC系列之二 子报表
  6. SVG 2D入门3 - 文本与图像
  7. Namespaces(命名空间)
  8. python scrapy 基础
  9. bower解决js库的依赖管理
  10. PLSQL创建定时任务
  11. 后端必备的Linux知识
  12. MySql Scaffolding an Existing Database in EF Core
  13. TCP/UDP端口列表(WIKIpedia)
  14. am335x gpio分析
  15. idea中使用插件lombok简化java bean的getter/setter/log等常用功能
  16. 数据库填充DataSet,逐行访问
  17. vs tip1
  18. MAC下查看环境变量的值的方法
  19. HDU-6395 多校7 Sequence(除法分块+矩阵快速幂)
  20. Java方式配置Spring MVC

热门文章

  1. 十分钟(小时)学习pandas
  2. GeoServer安装配置
  3. 从.Net到Java学习第四篇——spring boot+redis
  4. QT多线程的使用
  5. vue父子组件之间传值
  6. uiautomatorviewer 查看元素报错: Error taking device screenshot: null 原因
  7. [转]QQ空间、新浪微博、腾讯微博等一键分享API链接代码
  8. 【公众号系列】SAP HANA和区块链
  9. JPA之@Transient
  10. C 语言 IO 缓存 相关