给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n, 并且子串s[0…k - 1]中的0的个数与子串s[k…n - 1]中1的个数相等。 注意:
(1) 如果k = 0, s[0…k - 1]视为空串
(2) 如果k = n, s[k…n - 1]视为空串
(3) 如果存在多个k值,输处任何一个都可以
(4) 如果不存在这样的k值,请输出-1
输入
就一行,包含一个0-1串S,长度不超过1000000。
输出
题目要求的k值
输入样例
01
输出样例
1
注意特判
#include<bits/stdc++.h>
using namespace std;
string str;
int a[1000010],b[1000010],len;
int find()
{
for(int i=0;i<len;i++)
if(a[i]==(b[len-1]-b[i]))
{
cout<<i+1;return 1;
}
return 0;
}
int main()
{
ios::sync_with_stdio(false);
cin>>str;
len=str.length();
a[0]=0;b[0]=0;
for(int i=0;i<len;i++)
{
a[i]+=a[i-1];
b[i]+=b[i-1];
if(str[i]=='1') b[i]++;
else a[i]++;
}
/* for(int i=0;i<len;i++)
cout<<a[i]<<" "<<b[i]<<endl;*/
if(0==b[len-1]) cout<<0;//k==0
else if(a[len-1]==0) cout<<len;//k==n
else if(!find()) cout<<-1;
return 0;
}