-
题目描述
拉齐有一个01序列,他可以对这个序列进行任意多次变换,每次变换都是把序列的最后若干个元素放到最前面,例如:010011,将最后三个元素011放到最前面,序列变为011010.所有变换结束后,拉齐需要挑出一个全为1的连续区间,要求最大化区间长度。 -
输入
共一行,一个01串,仅包含0或1.序列长度不超过50000。 -
输出
一个整数,展示最长区间的长度。 -
样例
In:11011
Out:4
# -*- coding: utf-8 -*-
"""
Created on Sat Apr 13 20:00:45 2019
@author: alan1
"""
#思路:先求出所有为1的子串长度,存入save_max列表,找出其中的最大值max_1
#只有s的头部加上尾部可能大于max_1,比较两者大小,输出更大的。
s = input()
max_0 = 0
save_max = []
#遍历字符串,寻找变换之前的最长区间
i = 0
while(i!=len(s)-1):
if s[i] =='1':
max_0 = 1
i+=1
while(s[i]=='1'):
max_0+=1
i+=1
if i>len(s)-1:
break
save_max.append(max_0)
i+=1
if i>len(s)-1:
break
max_1 = max(save_max)
#序列s全为1的情况
if max_1==len(s):
print(max_1)
else:
#如果头部全为1,进行相应的变换,得到新的最长区间长度
if(s[0]=='1'):
i = 1
num = 1
while(s[i]=='1'):
num+=1
i+=1
j = len(s)-1
if s[j]=='1':
num+=1
j-=1
while(s[j]=='1'):
num+=1
j-=1
#比较大小
if num>max_1:
print(num)
else:
print(max_1)
虽然是水题…但还是mark一下吧。序列全为1的情况一开始没有考虑,一直只有90%的正确率。
细心。