Расстояние Левенштейна
Минимальное число вставок/удалений/замен, чтобы превратить одно слово в другое.
1function levenshtein(a: string, b: string): number {2 const m = a.length, n = b.length3 // d[i][j] — расстояние первых i символов a до первых j символов b4 const d: number[][] = Array.from({ length: m + 1 }, () =>5 new Array(n + 1).fill(0),6 )7 8 for (let i = 0; i <= m; i++) d[i][0] = i // удалить всё9 for (let j = 0; j <= n; j++) d[0][j] = j // вставить всё10 11 for (let i = 1; i <= m; i++) {12 for (let j = 1; j <= n; j++) {13 const cost = a[i - 1] === b[j - 1] ? 0 : 114 d[i][j] = Math.min(15 d[i - 1][j] + 1, // удалить16 d[i][j - 1] + 1, // вставить17 d[i - 1][j - 1] + cost, // заменить/совпало18 )19 }20 }21 22 return d[m][n]23}Проблема
Минимальное число вставок/удалений/замен, чтобы превратить одно слово в другое.
Что вы видите
Таблица префиксов: клетка d[i][j] — цена превращения первых i букв в первые j; ответ в углу.
Как это работает
Динамика по префиксам: d[i][j] берёт минимум из «удалить», «вставить», «заменить/совпало». Диагональный маршрут по готовой таблице — это и есть минимальная правка.
Пошаговый разбор
- 01
База
Превратить в пустоту = удалить всё.
- 02
Клетка
Минимум из удалить/вставить/заменить.
- 03
Ответ
Правый нижний угол таблицы.
Complexity и ограничения
Сложность см. в шапке страницы.
Edge cases
- Пустой вход
Корректная тривиальная обработка.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
Спелл-чекер
«Вы имели в виду…» — ближайшие слова словаря.
diff/git
Минимальный набор правок между версиями.
ДНК
Эволюционное расстояние между геномами.
Связанные алгоритмы
«Сколько правок между двумя словами»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.