用c++解决 给定一个长度为n的01串,你需要选择一段任意长度(可以为0)的区间对其翻转,翻转后,求最长的一段连续的全是1的区间的长度。 如0111001011答案为5
时间: 2024-04-12 13:28:09 浏览: 114
下面是使用C++解决这个问题的示例代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
int maxConsecutiveOnes(string s) {
int n = s.length();
int maxLen = 0;
int curLen = 0;
for (int i = 0; i < n; i++) {
if (s[i] == '1') {
curLen++;
} else {
maxLen = max(maxLen, curLen);
curLen = 0;
}
}
maxLen = max(maxLen, curLen);
return maxLen;
}
int main() {
string s;
cin >> s;
int maxLength = maxConsecutiveOnes(s);
cout << maxLength << endl;
return 0;
}
```
通过遍历字符串,我们可以计算出最长的连续全为1的区间长度。变量`maxLen`用于记录最长区间的长度,变量`curLen`用于记录当前区间的长度。当遇到字符'1'时,`curLen`增加;当遇到字符'0'时,我们更新`maxLen`并将`curLen`重置为0。最后,我们再次更新`maxLen`,以确保最长的区间长度被计算。
对于输入样例 `0111001011`,该代码将输出 `5`,表示最长的连续全为1的区间长度为5。
阅读全文