传送
题意:一个只包含G和S的字符串,一次交换能使连续的G最长为多少。
思路:想要使只包含G的子串最长,显然贪心地将两个子串中间的S与一个不在子串的G交换再与最大值比较就可以了,要注意除了这两个子串外还有没有多余的G可供交换。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int tmp[100010];
string s;
int main() {
scanf("%d", &n);
cin >> s;
int sum = 0;
int cntg = 0, cnts = 0, tmpg = 0, ans = 0;
int maxn = 0;
for(int i = 0; i < n; i++) {
if(s[i] == 'G') sum++;
}
for(int i = 0; i < n; i++) {
if(s[i] == 'G') {
cntg++;
if(cnts) tmpg++;
}
else {
cnts++;
if(cnts == 2) {
if(cntg == sum) maxn = max(maxn, cntg);
else maxn = max(maxn, cntg + 1);
cntg = tmpg;
cnts = 1;
tmpg = 0;
}
}
}
if(cntg == sum) maxn = max(maxn, cntg);
else maxn = max(maxn, cntg + 1);
printf("%d", maxn);
return 0;
}