小红的01连续段

前言

这是ACM实验室第二次训练赛的某个题目,这么简单的题我竟然在上面卡了1个小时,真是无敌了,所以特地把这题扔到博客里面拷打一下自己……

https://ac.nowcoder.com/acm/contest/95700/G

题目描述

小红定义一个01串的“连续段”为:连续相同字符的极大长度。例如:”110001111”有一个长度为2的连续段,有一个长度为3的连续段,有一个长度为4的连续段。
小红拿到了一个01串,但其中有一些字符不可见了(用’?’表示)。小红想知道,这个01串的连续段长度的最大值最多能达到多少?

输入描述:

1
一个仅由'0'、'1'、'?'组成的字符串,长度不超过200000。

输出描述:

1
一个正整数,代表连续段长度的最大长度。

示例1

输入

1
1?0?1?

输出

1
3

说明

1
该字符串可以是"100011",最大的连续段长度为3。

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

string s;

int main() {
cin >> s;
int count1=0,count0=0,maxn1=0,maxn0=0;
for (int i=0; i < s.size(); i++) {
if (s[i] == '1') count1++, count0=0;
else if (s[i] == '0') count0++, count1=0;
else count0++,count1++;
maxn1 = max(maxn1, count1);
maxn0 = max(maxn0, count0);
}

cout << max(maxn1, maxn0);

return 0;
}

遍历一遍所有字符计数不旧好了……

我当时的智障思维是去找符合条件的集合,这确实是人类在计算这道题的时候的正常思维方法,但是其实一个一个元素判断并计数就OK了