Разбить текст на слова, последовательность слов на `sqrt(N)` участков
по `sqrt(N)` слов.
Поиск и удаление слова по позиции можно выполнять за время `sqrt(N)`.
Для замены нужно хранить количество вхождений слова в каждый участок
и изменение длины участков можно сделать за `sqrt(N)`.
При реализации нужно учитывать, что после замены слово может совпасть
с одним из существующих и в дальнейшем их нужно будет изменять одновременно.
Для упрощения обработки таких совпадений можно использовать
систему непересекающихся множеств.