题目链接:https://vjudge.net/problem/CodeForces-603A
题目大意:
给你一个长为n的串,只包含0和1字符,求这个串的最长的交替子序列(不连续),例如010,1,1010等都是交替序列,1001,11等都不是。还可以对串的一个连续子串做一个操作,将子串中的0都反转为1,或着,将子串中的1都反转为0.
求这个串的最长的交替子序列。
解题思路:
若是满足进行反转的情况,则最多增加两个字符。
所以,只需考虑不进行反转时,最长的交替子序列。
若是10100.....0......01010,则最长的为 10101010 长度为8.
具体看代码。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
#include<vector>
#include<string>
using namespace std;
typedef long long ll;
const int INF=1e5+5;
char a[INF];
int n;
int main()
{
cin>>n;
scanf("%s",a);
int i,j;
int sum=1;//注意初始化为1
for(i=1;i<n;i++)
{
if(a[i]!=a[i-1])sum++;
}
printf("%d",min(sum+2,n));
return 0;
}