АЛГОРИТМ МАНАКЕРА PYTHON
Алгоритм Манакера (также известен как алгоритм Палмера-Бэйкера) — это алгоритм для проверки палиндромности строки. Алгоритм имеет линейную сложность и использует информацию о палиндромах, найденных ранее.
Алгоритм работает следующим образом:
- Определяется длина строки и создаются два массива p и d, где p хранит информацию о найденных палиндромах, а d инициализируется нулями.
- Алгоритм проходит по строке слева направо и отмечает границы для каждого найденного палиндрома в массиве p.
- Для каждой позиции 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 собеседовании на которой многие валятся. Палиндром.
Новые материалы:
- Как в python нарисовать квадрат
- Python метод strip
- Python обратное число по модулю
- No module named numpy python как исправить
- Путь python черный пояс по разработке масштабированию тестированию и развертыванию
- Фоксфорд игры на python
- Глубокое обучение на python франсуа шолле
- Отличие кортежа от списка python
- Количество элементов которые больше предыдущего python
- Напишите программу которая находит максимальный и минимальный из элементов массива с четными python