DEV//UNIT

Расстояние Левенштейна

Минимальное число вставок/удалений/замен, чтобы превратить одно слово в другое.

время O(m·n)память O(m·n)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function levenshtein(a: string, b: string): number {
2 const m = a.length, n = b.length
3 // d[i][j] — расстояние первых i символов a до первых j символов b
4 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 : 1
14 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] берёт минимум из «удалить», «вставить», «заменить/совпало». Диагональный маршрут по готовой таблице — это и есть минимальная правка.

Пошаговый разбор

  1. 01

    База

    Превратить в пустоту = удалить всё.

  2. 02

    Клетка

    Минимум из удалить/вставить/заменить.

  3. 03

    Ответ

    Правый нижний угол таблицы.

Complexity и ограничения

time
O(m·n)
space
O(m·n)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Спелл-чекер

«Вы имели в виду…» — ближайшие слова словаря.

diff/git

Минимальный набор правок между версиями.

ДНК

Эволюционное расстояние между геномами.

Связанные алгоритмы

Shorts

«Сколько правок между двумя словами»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Сколько правок между двумя словами
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/levenshtein