有一个长度为 n 的 01 串,其中有一些位置标记为 ?
,这些位置上可以任意填充 0
或者 1
,请问如何填充这些位置使得这个 01串中出现互不重叠的 00
和 11
子串最多,输出子串个数。
输入格式
输入一行包含一个字符串。
输出格式
输出一行包含一个整数表示答案。
数据范围
对于所有评测用例,1≤n≤106。
输入样例:
1110?0
输出样例:
2
样例解释
如果在问号处填 0
,则最多出现一个 00
和一个 11
:111000
。
思考:只要能配对就配上,不用管后面的,这样就是最优的
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
string s;
cin >> s;
int res = 0;
for (int i = 0; i + 1 < s.size(); i ++ )
{
char a = s[i], b = s[i + 1];
if (a == b || a == '?' || b == '?')
{
res ++ ;
i ++ ;
}
}
cout << res << endl;
return 0;
}