[题目描述]
小理有一个 01 串,串中只包含 0 和 1 ,小理要把这个串划分成连续的 m 段,使得每一段至少包含一个 0 和一个 1 。小理想最大化 m ,m 最大是多少呢?
输入格式:
输入包含一行一个 01 串 S 。保证中至少包含一个 0 和一个 1 。
输出格式:
输出一行一个整数表示答案。
样例输入
10101111000010101111010101
样例输出
9
数据范围
对于 100% 的数据,保证 2≤s.length≤105 。
来源/分类(难度系数:四星 )
字符串 前缀和
++完整代码展示:++
n=list(input())
sum=0
m=[]
for i in range(0,len(n)):
if len(m)==0:
m.append(n[i])
else:
m.append(n[i])
if (m[-2]=='1' and m[-1]=='0') or (m[-2]=='0' and m[-1]=='1'):
sum+=1
m=[]
print(sum)
++代码解释:++
"n=list(input()) ",让用户输入一个01串,并将其分割为单个元素后储存在列表n中。
"sum=0
m=[]
for i in range(0,len(n)):
if len(m)==0:
m.append(n[i])
else:
m.append(n[i])
if (m[-2]=='1' and m[-1]=='0') or (m[-2]=='0' and m[-1]=='1'):
sum+=1
m=[] ",令sum=0,建立一个空列表m,接着依次遍历n中元素:判断m的长度是否为0,如果是,则将n[i]添加进列表m中,否则让n[i]添加进m中,判断m的末两位元素是否为01或10,如果是,则让sum+1,令m=[]。
"print(sum)",打印sum的最终结果。
++运行效果展示:++
++++
(声明:以上内容均为原创)