51nod1658 01交替子序列

有一个长度为n的01串。现在要找出这个串的最长的01交替子序列(不需要是连续的)。比如{0,1,0,1}, {1,0,1},和{1,0,1,0} 都是01交替序列,但是{1,0,0} 和 {0,1,0,1,1} 不是。

这个问题好像过于简单了,那么现在加一些难度,可以对该串的某一段连续的字符进行反转。即把某一段中的{0变成1},{1变成0}。

问经过修改之后最大长度的01交替子序列是多少。

样例解释:

把粗体的部分反转一下 '10000011' ,那么原来的串就变成'10011011',有一个长度为5的01交替子序列:  '10011011'。

 收起

输入

单组测试数据。
第一行有一个整数n(1≤n≤100000)。
第二行有n个字符,表示原始的01序列。

输出

输出一个整数,表示答案。

输入样例

8
10000011

输出样例

5

发现至少要和原来有的跳跃序列相同多,找连续的00或11,如果只有1个,加1,超过1次加2,真正做时只需要判断相邻是否相等即可,因为如果00只出现一次,一定有n-1个跳跃序列,变化后是n个, 00出现次数大于1次时,出现原来一定小于n-1个,现在加2个

#include
#include
#include
#include
using namespace std;
int n;
string s;
int main()
{
   cin>>n;
     cin>>s;
     int cnt=1;
     for(int i=0;i

 

你可能感兴趣的:(思维)