【题目描述】
有一个长度为 n 的 01 串,其中有一些位置标记为 ?,这些位置上可以任意填充 0
或者 1
,请问如何填充这些位置使得这个 01 串中出现互不重叠的 00 和 11 子串最多,输出子串个数。
【输入格式】
输入一行包含一个字符串。
【输出格式】
输出一行包含一个整数表示答案。
【数据范围】
对于所有评测用例,1≤n≤10的6次方。
【输入样例】
1110?0
【输出样例】
2
【样例解释】
如果在问号处填 0
,则最多出现一个 00
和一个 11
:111000
。
【代码】
cpp
#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 ++ )
if (s[i] == s[i + 1] || s[i] == '?' || s[i + 1] == '?')
{
res ++ ;
i ++ ;
}
cout << res << endl;
return 0;
}