双指针法:
用一个左指针和一个右指针,遍历字符串,先固定左指针,
当右指针指向的值等于左指针的值时,就继续移动右指针,然后判断右指针与左指针之间的长度是否大于等于3,如果是的话,就删除掉s中的这一段,并且左指针回退2位,如果否,就移动左指针;
def elimination(s):
l = 0
while l < len(s):
r = l # 把右指针更新为当前位置
while r < len(s) and s[r] == s[l]:
r += 1
if r - l >= 3: # 如果找到三个以上重复的元素
s = s[:l] + s[r:] # 在s中删除
l -= 2 # l回退2个位置,比如CCDDD, 回退两个位置能使l指向第一个C
if l < 0:
l = 0
else:
l = r
# l += 1 # 这里也可以是l+=1,但是会存在一定的重复运算 比如CCB,l先指向第一个C,然后又要指向第二个C,但r-l都不满足>=3
return s
s = 'AAAABBBCCCBBCA'
ans = elimination(s)
print(ans)