去掉字符串中连续出现k个0的子串
去掉连续k个0的子串
【题目】
给定一个字符串s和一个整数k,如果str中正好有连续的k个’0’字符出现时,把k个连续的’0’字符去除,返回处理后的字符串。
【举例】
s=“A00B”,k=2,返回"AB"。
s=“A0000B000”,k=3,返回"A0000B"。
算法思路
考虑逻辑分析能力和边界处理问题。
创建字符串s
对应的字符数组arr
count
统计连续’0’字符个数,index
统计连续’0’字符起始索引
遍历arr
,遇到’0’字符统计数量;
遇到非’0’字符判断之前连续’0’字符个数是否为k
,若为k
,则将arr
中index ~ index + k -1
全部置换为''
;
最后返回字符数组arr
构成的字符串。
时间复杂度为
O
(
N
)
O(N)
O(N),空间复杂度为
O
(
l
e
n
(
s
)
)
O(len(s))
O(len(s))
相应代码
# 去掉字符串中连续出现k个0的子串
def remove_k_zeros(s, k):
if s is None or len(s) == 0 or k < 1 or k > len(s):
return s
arr = list(s)
count = 0 # 当前'0'连续个数
index = -1 # 当前'0'起始索引
for i in range(len(arr)):
if arr[i] == '0':
count += 1
if index == -1:
index = i
# 非'0'字符核验是否清除连续k个0
else:
# 清除连续k个0
if count == k:
for j in range(index, index + k):
arr[j] = ''
count = 0
index = -1
if count == k:
for j in range(index, index + k):
arr[j] = ''
return ''.join(arr)
# 简单测试
if __name__ == '__main__':
print(remove_k_zeros("A00B", 2)) # "AB"
print(remove_k_zeros("A0000B000", 3)) # "A0000B"
有任何疑问和建议,欢迎在评论区留言和指正!
感谢您所花费的时间与精力!