版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/86917774
1396 还是01串
- 1 秒
- 131,072 KB
- 20 分
- 3 级题
给定一个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
解题思路
遍历出一共多少个0、1,记录每个位置的0、1的数量,比较就行了。特别注意的是:当全是0的时候,答案是0,全是1的时候,答案是串的长度。
AC代码
#include<iostream>
using namespace std;
struct node
{
int s0,s1;
}a[1000001];
int main()
{
string s;
cin>>s;
int sum0,sum1;
sum0=sum1=0;
int i,j;
for(i=0;i<s.length();i++)
{
if(s[i]=='0')
sum0++;
else
sum1++;
a[i].s0=sum0;
a[i].s1=sum1;
}
int flag=0;
for(i=0;i<s.length();i++)
{
if(a[i].s0==sum1-a[i].s1)
{
flag=1;
cout<<i+1<<endl;
break;
}
}
if(flag!=1)
{
if(sum0==s.length()) cout<<"0"<<endl;
else if(sum1==s.length()) cout<<s.length()<<endl;
else cout<<"-1"<<endl;
}
}