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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值