AcWing 1342. 断开的项链(双指针)
原题链接
简单
作者:
Vason
,
2024-04-14 17:58:16
,
所有人可见
,
阅读 7
浅浅写一下代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 710;
char a[N];
int n;
int main()
{
scanf("%d\n%s", &n, a + 1);
for(int i = 1; i <= n; i ++) a[i + n] = a[i]; //破环成链
int res = 0;
for(int i = 1; i <= n; i ++) //分别以1~n中的点为起点枚举
{
int l = i, r = i + n - 1; //设置左右端点
while(a[l] == 'w' && l < r) l ++; //如果起始点为w则枚举至第一个不是白色的棋子
while(a[r] == 'w' && l < r) r --;
char lc = a[l], rc = a[r];
while((lc == a[l + 1] || a[l + 1] == 'w') && l < r) l ++;
while((rc == a[r - 1] || a[r - 1] == 'w') && l < r) r --;
res = max(res, (l - i + 1) + (i + n - 1 - r + 1));
}
printf("%d", min(res, n));
return 0;
}