题目描述
有一个长度为 n 的 01 串,其中有一些位置标记为 ?,这些位置上可以任意填充 0 或者 1,请问如何填充这些位置使得这个 01 串中出现互不重叠的 00 和 11 子串最多,输出子串个数。
输入格式
输入一行包含一个字符串。
输出格式
输出一行包含一个整数表示答案。
样例
输入
1110?0
输出
2
题解
#include<iostream>
using namespace std;
int main()
{
string str;
cin >> str;
int n = str.length(), count = 0, flag = 0;
//flag = 0表示前面的数已配对,1为未配对
for (int i = 0; i < n; i++)
{
if (str[i] == '?')
{
if (flag == 1)
{
str[i] = str[i - 1];
count++;
}
else if (i == (n - 1))
{
flag = 1;
}
else
{
str[i] = str[i + 1];
count++;
i++;
}
flag = 0;
}
else
{
if (str[i] == str[i + 1])
{
count++;
flag = 0;
i++;
}
else
{
flag = 1;
}
}
}
cout << count;
return 0;
}