#pragma warning (disable:4996)
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e5 + 20;
int a[maxn];
int pos[maxn * 2];
int main() {
int n;
while (scanf("%d", &n) != EOF) {
string str;
cin >> str;
for (int i = 1; i <= n; i++) {
str[i - 1] == '0' ? a[i] = -1 : a[i] = 1;
}
int sum = 0, ans = 0;
for (int i = 1; i <= n; i++) {
sum += a[i];
if (sum == 0) {
ans = max(ans, i);
continue;
}
int tmp = sum;
if (tmp < 0) {
tmp = -tmp + n;
}
if (!pos[tmp])
pos[tmp] = i;
else
ans = max(ans, i - pos[tmp]);
}
printf("%d\n", ans);
}
return 0;
}
codeforces 873B Balanced Substring前缀和
该博客主要展示了一个C++程序,用于读取一个字符串并找出其中连续零(0)和一(1)的最长子串。程序通过遍历字符串,维护一个累计和变量,当和为零时更新最大长度。同时,程序利用哈希映射记录不同累计和对应的起始位置,以优化查找过程。这是一个关于字符串处理和算法实现的实例。
摘要由CSDN通过智能技术生成