JZOJ__Day 2:【普及模拟】串

题目描述

给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。

输入

一个字符串,只包含01,长度不超过1000000。

输出

一行一个整数,最长的0与1的个数相等的子串的长度。

样例输入

1011

样例输出

2

数据范围限制

30%的数据 串的长度<20



程序:

        

var
s:ansistring;
i,j,min,max,p,l:longint;
min1,max1:array[-1000001..1000001]of longint;
begin
    fillchar(min1,sizeof(min1),127);
    min1[0]:=0;
    readln(s);
    min:=maxlongint;
    p:=0;
    max:=0;
    for i:=1 to length(s) do
    if s[i]='1' then
    begin
        inc(p);
        if p>max then max:=p;
        if p<min then min:=p;
        if i<min1[p] then min1[p]:=i;
        if i>max1[p] then max1[p]:=i;
    end else
    begin
        dec(p);
        if p>max then max:=p;
        if p<min then min:=p;
        if i<min1[p] then min1[p]:=i;
        if i>max1[p] then max1[p]:=i;
    end;
    for i:=min to max do
    if l<max1[i]-min1[i] then l:=max1[i]-min1[i];
    write(l);
end.


原文地址:https://www.cnblogs.com/YYC-0304/p/9500098.html