Прошу помочь. Мне хотелось бы как-то аккуратно оформить доказательство следущего утверждения. Думаю, что оно верное.
Пусть

-- конечная строка символов произвольного алфавита, в которой каждый символ содержится ровно два раза. Допускается выполнение следующих операций:

-- удаление двух одинаковых символов идущих друг за другом, то есть символов вида

;

-- замена двух символов, встречающихся в строке в виде

, на один.
Утверждается, что:
существует квадратичный алгоритм проверки сокращения строки с помощью операций
до одной из строк -- пустая строка,
, 
.
Пусть на входе содержится строка

длины

. В дальнейшем вся нумерация списков и массивов будет начинаться с единицы.
1) Представим

в виде соответствующего связного списка, который назовем

. Для этого потребуется один проход по

, то есть

шагов. В этом же проходе создадим массив всех элементов строки, который обозначим через

. Общая сложность

.
2) Будем выполнять проход по

, начиная со второго элемента. На каждом шаге будем проверять равенство текущего и предыдущего элементов. Если равенство выполняется, то будем записывать индексы этих элементов в новый массив

. Общая сложность

.
3) Будем выполнять проход по

. На каждом шаге будем удалять элемент

соответсвующего индекса. Удаление элемента связного списка имеет сложность

. Поэтому общая сложность прохода

.
4) Будем выполнять проход по

, начиная с элемента под номером

. Запомним элементы

и

. На следущих шагах сравним текущий и предыдущие элементы с элементами памяти согласно условию (a): текущий элемент равен первому элементу памяти и предыдущий элемент равен второму элементу памяти. Если условие выполняется, то удалим второй элемент

и предыдущий элемент текущего шага. Повторим проход. Сложность каждого прохода

.
5) Если условие (a) не выполняется, то выполним итерацию прохода (4), начиная с

. Повторим (4) и (5) пункты

раз. Каждый повторение сложностью

. Общая сложность

.