В общем, попробуйте руками закодировать ABABABA.
Там как раз происходит наложение цепочек.
Первые два символа кодируются как обычно и в словарь добавляются AB и BA.
А потом две одинаковые цепочки подряд:
..ABA..
....ABA
При кодировании первого ABA
он был добавлен в словарь и был записан код для AB
.
Кодировщик использовал последнюю букву первого как начало новой проверки. При кодировании второго ABA
он взял из словаря код и записал его.
Но декодер когда прочитал первый AB
ещё не успел добавить ABA
в словарь. Потому следующий код ему неизвестен. А раз он не успел добавить, то значит это второй раз та же цепочка.
Так как это одинаковые цепочки, и их начало и конец совпадают, то это значит, что неизвестная цепочка — AB
+ первый символ.