题目:
切分以01组成的字符串,是的切分后的0和1比例相等,
如0110,从第二个切开分成01和10,是的左右0和1的比例都是1
分析:
1 从当前i向前,所有字符串最大能切分几份是的01比例相等,记录到结果当中
2 从当前i位置向前统计0和1的个数记录在长度为2的数组,0位置是0的个数,1位置是1的个数,依据个数,分为以下情况:
a 有一个统计结果为0,则分为不为0的份数
b 都不为0 ,则计算个数的最大公约数,分成最大公约数份(a已经处理了为0的情况,这里不用再判断0值)
#!/usr/bin/python
# -*- coding:utf-8 -*-
#wnagzhoufeng
#切分01的字符串,使切分后左右两边01比例相等"001010100"
def process(s):
res=[1 for _ in range(len(s))]
print res
for i in range(1,len(s)):
l=i
tmp=[0,0]
while l>=0:
if s[l]=="0":
tmp[0]+=1
elif s[l]=="1":
tmp[1]+=1
l-=1
print tmp
# if tmp[0]==tmp[1]:
# res[i]=tmp[0]
if tmp[0]==0 and tmp[1]!=0:
res[i]=tmp[1]
if tmp[1]==0 and tmp[0]!=0:
res[i]=tmp[0]
else:
res[i]=tossing_dividing(tmp[0],tmp[1])
print res
def tossing_dividing(x, y):
"""
辗转相除法:
两数求余temp = x % y
temp = 0 时,y为最大公约数
temp != 0 时,x = y;y = temp 注:该循环的是否继续的判断条件就是temp是否为0
"""
temp = x % y
while temp != 0:
x = y
y = temp
temp = x % y
return y
# print tossing_dividing(3,3)
s="001010100"
process(s)```