去掉字符串当中的连续k个0,Python版
来源:互联网 发布:淘宝追加的评论不见了 编辑:程序博客网 时间:2024/05/17 05:59
题目:
给定字符串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 0
- 去掉字符串当中的连续k个0,Python版
- 去掉字符串中连续出现k个0的字串
- 字符串——去掉字符串中连续出现k个0的子串
- 字符串问题---去掉字符串中连续出现k个0的子串
- 去掉字符串中连续出现的K个0的子串
- 去掉字符串中连续出现k个0的子串
- 去掉字符串中连续出现k个0的子串
- 去掉字符串中首次连续出现k个0的子串。
- 5.3 去掉字符串中连续出现k个0的子串
- 去掉字符串中连续出现k个0的子串
- 经典笔试题——去掉字符串中连续出现K个0的子串
- C++实现去掉字符串中连续相同K个0子串
- 去掉字符串中出现k个0的子串
- 去掉字符串连续多个空格的方法
- C++删除字符串中出现的连续的k个0
- 利用python求数组中连续k个相同值的最大的k
- python当中关于字符串的处理
- Python去掉字符串中空格的方法
- JZOJ5460. 【NOIP2017提高A组冲刺11.7】士兵训练
- 折半枚举(双向搜索)
- 虚树
- mysql5.7的安装参考这两篇文章
- nginx源码阅读(十一).ngx_epoll_module模块(上)
- 去掉字符串当中的连续k个0,Python版
- win10无法访问pv6资源解决办法
- Linux 学习笔记
- html中一些界面设计
- HDU
- LeetCode-25. Reverse Nodes in k-Group
- 一个初中生的NOIP2017提高组拉闸记
- android camera(一):camera模组CMM介绍
- spring依赖注入及其方式