首页 > 试题广场 >

最长区间

[编程题]最长区间
  • 热度指数:4520 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
拉齐有一个 01 序列,他可以对这个序列进行任意多次变换,每次变换都是把序列的最后若干个元素放到最前面,例如:010011,将最后 个元素 011 放到最前面,序列变为 011010 。所有变换结束后,拉齐需要挑出一个全为 的连续区间,要求最大化区间长度。

数据范围:输入序列长度满足

输入描述:
共一行,一个01串,仅包含0或1。序列长度不超过50000。


输出描述:
一个整数,表示最长区间的长度。
示例1

输入

11011

输出

4

说明

把最后两个 1 放到最前面,形成一个长度为 4 的全 1 区间 
JS V8 来了!
while (line = readline()) {
    var s1 = line;
    var c = 0;
    var l = 0;
    if (s1.indexOf(0) != -1) {
        var s2 = s1 + s1;
        for (let i = 0; i < s2.length; i++) {
            if (s2[i] != 0) {
                c++;
                if (c > l) {
                    l = c
                }
            } else {
                c = 0
            }
        }
        print(l)
    } else {
        print(s1.length)
    }
}


发表于 2020-02-13 11:27:07 回复(3)
把字符串与自身拼接,找新字符串中的连续1的区间长度,考虑原字符串全为1或全为0的情况, 
var input=readline();
if(!input.includes(0)){
     var l=input.length;
        print(l);
    }else if(!input.includes(1)){
        print(0);
    }else{
        var str=input+input;
        foo(str);
    }
function foo(str){
        var arr=str.match(/1{1,}/g);
        var len=[];
        arr.map(()=>{
	        for(var i=0;i<arr.length;i++){
		         len[i]=arr[i].length
	      }
	        return len;
    });
len.sort((a,b)=>{
	return b-a;
	});
print(len[0]);
}

编辑于 2019-08-12 15:22:54 回复(0)