题目大意:字符串是由0和1组成,求字符串的最长子串,使0和1的数目相同
记录0和1的个数,然后当两个个数相同的情况下,进行暴力,求最大值
ps:还要注意整个字符串为平衡串的情况
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
using namespace std;
typedef long long ll;
map<int,int> mp;
int main() {
int n;
char s[1000001];
int ans = 0;
int x = 0;
int y = 0;
cin >> n;
cin >> s;
for(int i = 0;i < n;i++) {
if(s[i] == '1') {
x++;
}
else y++;
if(mp.count(y-x)) {
ans = max(ans, i-mp[y-x]);
}
else {
mp[y-x] = i;
}
}
if(x == y) {
ans = n;
}
cout << ans << endl;
return 0;
}