например «ccddcc» в строке «abaccddccefe»Написать функцию, которая возвращает длинный палиндром в заданной строке
Я думал о решении, но он работает в O времени
(п^2)Algo 1:
шаги: Его грубой силы метод
- Есть 2 для туалета пс
для г = 1 до I меньше, чем Array.length -1
для J = я + 1 до J менее array.length - Таким образом, вы можете получить подстроку всех возможных комбинаций из массива
- Имейте функцию палиндрома, которая проверяет, является ли строка палиндром
- поэтому для каждой подстроки (i, j) вызов этой функции, если она является палиндром, сохраняет ее в строковой переменной
- Если вы найдете следующую подстроку палиндрома и если она больше текущей, замените ее на текущую.
- Наконец переменная строка есть ответ
вопросы: 1. Этот алго запускается в O (N^2) время.
Algo 2:
- Reverse строки и сохранить ее в Diferent массива
- Теперь найти самую большую найденную подстроку между оба массивом
- Но это тоже работает в O (N^2) время
Можете ли вы, ребята, подумать о алго, который работает в лучшем случае. Если возможно O (n) время
Я думаю, что первая из них является 'O (N^2)', чтобы получить подстроки * 'O (N)', чтобы проверить, если они палиндромов, в общей сложности 'O (N^3)' ? –
Что делать, если я знал, что я работаю с палиндром и сохраняю свои строки как две половины, а затем, если бы я использовал Java, у меня была бы проверка O (1) для этой функции? –
Секундовое слово правильно? Как насчет строки: «abcdecba». Самая большая совпадающая подстрока («abcdecba» vs. «abcedcba»): «abc» или «cba». Однако оба они не являются палиндромами. – Yarneo