АЛГОРИТМ МАНАКЕРА PYTHON

Алгоритм Манакера (также известен как алгоритм Палмера-Бэйкера) — это алгоритм для проверки палиндромности строки. Алгоритм имеет линейную сложность и использует информацию о палиндромах, найденных ранее.

Алгоритм работает следующим образом:

  1. Определяется длина строки и создаются два массива p и d, где p хранит информацию о найденных палиндромах, а d инициализируется нулями.
  2. Алгоритм проходит по строке слева направо и отмечает границы для каждого найденного палиндрома в массиве p.
  3. Для каждой позиции i в строке:
    • Алгоритм проверяет, не выходит ли текущий подстрок за границы уже найденного палиндрома и использует для этого информацию из массива p.
    • Если текущая позиция находится внутри найденного палиндрома, алгоритм использует информацию из массива d, для того чтобы определить, можно ли продолжить поиск палиндрома за пределами найденного.
    • Если палиндром найден, массивы p и d обновляются.

Вот пример кода на Python для реализации алгоритма Манакера:

def manacher(s): n = len(s) p, d = [0] * n, [0] * n p[0], r, center, length = 1, 0, 0, 1 for i in range(1, n): if i < r: d[i] = min(r - i, d[2 * center - i]) while i + d[i] < n and i - d[i] > 0 and s[i + d[i]] == s[i - d[i]]: d[i] += 1 if i + d[i] > r: center, r = i, i + d[i] if r - center > length: length = r - center p = [0] * n p[center - (length - 1) // 2: center + (length + 1) // 2] = [1] * length elif d[i] == r - i: if r - center == length: p[center - (length - 1) // 2: center + (length + 1) // 2] = [1] * length return [s[i] for i in range(n) if p[i] == 1]

#6. Алгоритм Краскала (Kruskal's algorithm) - Алгоритмы на Python

Алгоритмы и структуры данных (продвинутый поток) 15. Алгоритм Манакера. Дерево палиндромов

#1. Алгоритм Кнута-Морриса-Пратта (КМП-алгоритм) - Алгоритмы на Python

Палиндром -- Python задачи с технических собеседований (интервью)

D2. Базовые строки: префикс, Z-функции, манакер, хэши (Сергей Егоров)

Разбор задачи 647 pygame.ru Palindromic Substrings. Решение на C++

#4. Алгоритм Флойда (Floyd's algorithm) - Алгоритмы на Python

Задача на Junior Java, Javascript собеседовании на которой многие валятся. Палиндром.

BLGPG-AAE01097BA9C-24-09-19-20

Новые материалы: