思路:

最重要的是理解序列变换的本质是:把序列看作一个首尾相连的环,不管怎样变换,序列里元素的相对位置都没有变。那么我们的任务就很清晰了,就是在一个元素固定的环内找到元素全为1的最长连续序列。

处理:

一个比较简单的处理方法就是把序列看作环之后,再处理为一个以0开头(或者没有0)的序列,然后从头进行遍历计数即可。

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    while ((line = await readline())) {
        let tokens = line.split("");
        let i = 0;
        // 将1全部后置,直到0成为开头或者遍历了一圈
        while (tokens[0]==='1' && i<tokens.length){
            tokens.shift();
            tokens.push('1');
            i++;
        }
        // 对1进行计数,遇到0就停止记录count并与max数据比较
        let count = 0, max = 0;
        for (let char of tokens){
            if (char == '1')
                count++;
            else{
                if (max<=count)
                    max = count;
                count = 0;
            }
        }
        // 要考虑到最后一轮循环没有遇到0中断的情况
        if (max<=count)
            max = count;
        console.log(max);
    }
    return ;
})();