например, "ccddcc" в строке "abaccddccefe"
Я подумал о решении, но оно работает за время O (n ^ 2)
Алго 1:
Шаги: это метод грубой силы
- Имейте 2
цикла for для i = от 1 до i меньше array.length -1
для j = i + 1 to j меньше, чем array.length - Таким образом можно получить подстроку всех возможных комбинаций из массива
- Имейте функцию палиндрома, которая проверяет, является ли строка палиндромом
- поэтому для каждой подстроки (i, j) вызовите эту функцию, если это палиндром, сохраните ее в строковой переменной
- Если вы нашли следующую подстроку палиндрома и если она больше текущей, замените ее текущей.
- Наконец, ваша строковая переменная получит ответ
Проблемы: 1. Этот алгоритм работает за время O (n ^ 2).
Алго 2:
- Переверните строку и сохраните ее в другом массиве
- Теперь найдите самую большую совпадающую подстроку между двумя массивами
- Но это тоже выполняется за время O (n ^ 2)
Можете ли вы, ребята, придумать алгоритм, который будет работать в лучшее время. Если возможно O (n) раз
O(n^2)
получить подстроки *,O(n)
чтобы проверить, являются ли они палиндромами, всегоO(n^3)
?