一行一个整数,最长的0与1的个数相等的子串的长度。
1011 1111 1010
示例输出
2 0 4
思路:统计0与1的个数在串里相同且最大长度。可以见0就让ans--,1就++,当值为0的时候就比较一下当前的ma与i+1的大小
,但是有个问题就是当为000000000001111111111111(0的个数=1的个数)时会输出0,而不是20(假设1==0 位20个)。
#include<iostream> #include<cstring> #include<string> #include<cstdio> #include<algorithm> #include<map> #include<queue> #include<cmath> #define LL long long #define inf 1000010 char s[inf]; int dp[inf*2+10]; using namespace std; int main() { int n,i,j; while(~scanf("%s",s)) { memset(dp,-1,sizeof(dp)); n=strlen(s); int ans=0,ma; ma=0;dp[inf]=0; for(i=0;i<n;i++) { if(s[i]=='1') ans++; else if(s[i]=='0') ans--; if(dp[ans+inf] == -1) dp[ans+inf] = i+1; else ma=max(ma,i+1-dp[ans+inf]); } printf("%d\n",ma); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-14 11:17:40