算法71-切分01字符串得到最大的部分

题目:
切分以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)```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值