Различия двух текстов по словам
Условие
diffWords(a, b) возвращает массив { text, type }, где type - 'same', 'add' или 'remove'. Сравнение по словам, порядок сохраняется.
Что проверяют тесты
одинаковые тексты
добавление
удаление
замена
склейка соседних кусков одного типа
восстановление исходных текстов
Как подойти
Прикладное применение известной динамики: LCS даёт общий костяк, а всё, что в него не попало, распадается на удаления слева и добавления справа. Разбиение с захватом разделителя (скобки в регулярке) позволяет собрать исходный текст обратно - без этого подсветка различий поедет по пробелам. Склейка соседних кусков одного типа нужна, чтобы разметка не превратилась в сотню тегов на слово.
Подсказки: 3
- В основе - наибольшая общая подпоследовательность слов.
- Таблицу заполняй с конца, тогда восстановление идёт вперёд и порядок сохраняется.
- Разделяй с сохранением пробелов, иначе восстановить текст не получится.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.