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

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

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

; 

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

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

 длины 

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

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

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

, то есть 

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

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

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

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

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

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

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

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

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

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

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

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

 и 

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

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

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

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

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

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

.