还是01串

1396 还是01串

 

给定一个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<iostream>
#include<algorithm>
using namespace std;
int f[1000005];
int main(){
    string a;
    cin>>a;
    int la=a.size();
    for(int i=0;i<la;i++){
        if(a[i]=='0')
        f[i+1]=f[i]+1;
        else
        f[i+1]=f[i];
    }
    if(f[la]==0){
    cout<<la<<endl;
    return 0;
}
    for(int i=1;i<=la;i++){
        if(f[i-1]==(la-i+1-(f[la]-f[i-1])))
        cout<<i-1<<endl;
    }
    return 0;
} 
 
原文地址:https://www.cnblogs.com/yfr2zaz/p/10741840.html