Код Senior Реализация с нуля обновлено

Различия двух текстов по словам

Условие

diffWords(a, b) возвращает массив { text, type }, где type - 'same', 'add' или 'remove'. Сравнение по словам, порядок сохраняется.

Что проверяют тесты

  • одинаковые тексты

  • добавление

  • удаление

  • замена

  • склейка соседних кусков одного типа

  • восстановление исходных текстов

Как подойти

Прикладное применение известной динамики: LCS даёт общий костяк, а всё, что в него не попало, распадается на удаления слева и добавления справа. Разбиение с захватом разделителя (скобки в регулярке) позволяет собрать исходный текст обратно - без этого подсветка различий поедет по пробелам. Склейка соседних кусков одного типа нужна, чтобы разметка не превратилась в сотню тегов на слово.

Подсказки: 3
  1. В основе - наибольшая общая подпоследовательность слов.
  2. Таблицу заполняй с конца, тогда восстановление идёт вперёд и порядок сохраняется.
  3. Разделяй с сохранением пробелов, иначе восстановить текст не получится.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.