先遍历一遍找一遍,如果s[i]和s[i+1]不同的个数是n-1个说明字符串是长度为n的交替子序列
如果是n-2个则说明里面有一个11或者00
78 010101010101010101010101010101101010101010101010101010101010101010101010101010
举个例子从两个11那里后面那个1到最后全部反转就可以把序列变为长度为n的
如果有两个或两个以上的11或者00 则只能多加2个
1100100 4
1101010 6
#include<bits/stdc++.h>
#define fp(i,a,b) for(int i=a;i<=b;i++)
typedef long long ll;
typedef double dl;
using namespace std;
const int N=2e5+7;
const ll M=1e9+7;
const int INF=0x3f3f3f3f;
int n,m;
char s[N];
void solve()
{
scanf("%d",&n);
scanf("%s",s+1);
int cnt=1;
for(int i=1;i<n;i++)
{
if(s[i]!=s[i+1])
cnt++;
}
if(cnt==n-1) cnt=cnt+1;
else if(cnt<n-1)
{
cnt+=2;
}
//cnt=min(cnt,n);
printf("%d",cnt);
}
int main()
{
//ios::sync_with_stdio(0);
//cin.tie(0),cout.tie(0);
//int T; scanf("%d",&T)
//for(int i=1;i<=T;i++)
solve();
}

京公网安备 11010502036488号