去掉字符串当中的连续k个0,Python版

题目:
给定字符串str 和一个整数k。如果str中恰好出现了连续的k个0,则将k个0删除。
比如,给定字符串str = “0000fw300001203h000ui0000re3_0000”,k=4。返回的结果为“fw31203h000uire3_”。

代码:

class StringAlgorithm(object):

    def __init__(self):
        pass

    def remove_k_zeros(self, string, k):
        if string == "" or k <= 0 :
            return ""
        start = -1
        count = 0
        label = []
        for i in xrange(0, len(string)):
            if string[i] == "0":
                count += 1
            else:
                if count == k:
                    label.append(start)
                start = i
                count = 0
        temp = string
        while label:
            tag = label.pop()
            string = string.replace(temp[tag+1:tag+k+1], "")
        return string

解析:
1、确定算法的时间复杂度为 o(N),空间复杂度为o(1)。但是我的写法中,在if count == k: 语句之后,本来想写一句

string = string.replace(string[start+1:start+1+k], "")

但是报了一句错,所以就没有按照这种写法来,所以写的时候还是将所有的start标签记录了下来,最后从后向前做了一遍k个0的剔除工作。这样的话,时间复杂度为 o(n),空间复杂度最差为o(n/(k+1)),也就是多花了这么多的内存用来存储start标签。用以记录到底哪些位置是 k 个 0。
2、start 表示 k 个 0 的起始位置,count用来记录 0 的个数。但是实际上有更好的办法,也就是 start = start == -1 ? i : start,当然这不是python语法。当记录到0的时候,start就从当前位置开始,若是之前有记录到0,那么start值不变,否则,start记为 -1。这样的话,能够将空间复杂度降得更低。

体会:
1、了解到 python中没有 :**这样的语法。
2、想写个python库,里面放上绝大多数的算法的最优解,当然,由于所有的函数都独立,所以都是静态的方法。
3、发现大多数字符串的处理,几乎都能降到时间复杂度是一遍字符串循环,空间复杂度为若干变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值