📅  最后修改于: 2023-12-03 14:55:20.556000             🧑  作者: Mango
给定一个二进制字符串,删除其中所有形式为“0101”的子序列,求得在删除过程中能够得到的最小字符串长度。
首先,我们需要找到所有形式为“0101”的子序列。这可以通过遍历字符串并判断连续四个字符是否满足“0101”来实现。
接着,我们需要一次次地删除这些子序列,直到字符串中不存在“0101”子序列。删除这些子序列可以采用以下方法:
每次删除后,循环检查是否还有“0101”子序列存在。直到没有为止,输出当前字符串的长度。
下面是Python代码实现:
def find0101(s):
res = []
i = 0
while i <= len(s) - 4:
if s[i:i+4] == '0101':
res.append((i, i+3))
i += 4
else:
i += 1
return res
def findLongest(s, c):
n = len(s)
i = 0
longest = 0
while i < n:
if s[i] == c:
j = i+1
while j < n and s[j] == c:
j += 1
longest = max(longest, j-i)
i = j
else:
i += 1
return longest
def delete0101(s):
while True:
targets = find0101(s)
if not targets:
return len(s)
for t in targets:
i, j = t
l1 = findLongest(s[:i], '0')
l2 = findLongest(s[j+1:], '1')
s = s[:i-l1] + s[j+l2+1:]
break
s = '1110110101111010101010110101010100'
print(delete0101(s))
输出结果为 11
,即最小字符串长度。