题目 3159:
蓝桥杯2023年第十四届省赛真题-填充
时间限制: 5s 内存限制: 576MB 提交: 1331 解决: 415
题目描述
有一个长度为 n 的 01 串,其中有一些位置标记为 ?,这些位置上可以任意填充 0 或者 1,请问如何填充这些位置使得这个 01 串中出现互不重叠的 00 和 11 子串最多,输出子串个数。
输入格式
输入一行包含一个字符串。
输出格式
输出一行包含一个整数表示答案。
样例输入
1110?0
样例输出
2
提示
如果在问号处填 0 ,则最多出现一个 00 和一个 11:111000 。
对于所有评测用例,1 ≤ n ≤ 1000000 。
解题思路:
?到底是0是1都无所谓,有?就能组成一个子串:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
long long num = 0;
for(int i=0;i<s.length()-1;i++){
if(s[i] == s[i+1]||s[i+1]=='?'||s[i]=='?'){
num++;i++;
}
}
cout<<num;
return 0;
}