Хм, длина текста 1_000_000_000 это уже больше 256Мб, но допустим что на самом деле такого не бывает.
Но я подозреваю, что по памяти вы не проходите из-за очень неоптимальной функции putSubstrInStr. Вы на ровном месте создаёте временный массив, который занимает в несколько раз больше памяти чем исходный текст. Используйте методы строки (slice, substr и .т.п)
Тег A в реакте уже не работает?