Идея довольно проста.Мы просто перемещаем записи в другой стек и подсчитываем, сколько мы будем удалять.Для этого мы отслеживаем последний элемент и сколько раз его видели:
lastElement = ∅ //no last element
lastElementSeen = 0 //how many times did the last element occur in succession
totalRemoved = 0 //how many elements would we remove?
while(!stack.empty)
element = stack.top
stack.pop()
otherStack.push(element)
if element == lastElement
lastElementSeen++
else
if lastElementSeen >= 3
totalRemoved += lastElementSeen
lastElement = element
lastElementSeen = 1
Вы также можете фактически удалить элементы из других стеков, а не просто считать их.Вы также можете не помещать их в другой стек, если они вам больше не нужны.