Что не так в элементарном коде для поиска максимального палиндрома? Задача: найти максимальную подстроку палиндром в строке. Т.е.
Входные данные: "wow"
Выходные данные: "wow"
Входные данные: "123wow123"
Выходные данные: "wow"
Входные данные: "abcdebob"
Выходные данные: "bob"
Входные данные: "rokor aba"
Выходные данные: "rokor"
Моё решение, которое не проходит один скрытый тест:bool isSubstringPalindrom(const std::string& str, size_t pos, size_t length)
{
for (size_t i = 0; i 1; --substrLength) {
size_t substringsCount = s.size() - substrLength + 1;
for (size_t i = 0; i < substringsCount; ++i) {
if (isSubstringPalindrom(s, i, substrLength))
return getStringWithQuotes(s.substr(i, substrLength));
std::cout << s.substr(i, substrLength) << std::endl;
}
}

return getStringWithQuotes(s.substr(0, 1));
}

21 Авг 2019 в 06:23
204 +1
0
Ответы
1

Проблема в вашем коде заключается в том, что он не учитывает возможность наличия нескольких палиндромов максимальной длины в строке.
Для решения этой проблемы можно модифицировать ваш код, чтобы он сохранял все найденные палиндромы максимальной длины и вернул их все.
Также можно улучшить алгоритм, чтобы он был более эффективным. Например, можно использовать метод расширения палиндромов (expand around center), который быстрее и проще в реализации, чем текущий подход.
Используйте следующую функцию для поиска палиндромов максимальной длины в строке:

std::string longestPalindromeSubstr(string s) {
if (s.empty()) {
return ""; // если строка пустая, возвращаем пустую строку
}
int start = 0, end = 0;
for (int i = 0; i < s.size(); i++) {
int len1 = expandAroundCenter(s, i, i); // для палиндромов с нечетной длиной
int len2 = expandAroundCenter(s, i, i + 1); // для палиндромов с четной длиной
int len = std::max(len1, len2);
if (len > end - start) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.substr(start, end - start + 1); // возвращаем найденный палиндром
}
int expandAroundCenter(string s, int left, int right) {
while (left >= 0 && right < s.size() && s[left] == s[right]) {
left--;
right++;
}
return right - left - 1;
}

Этот код ищет все палиндромы максимальной длины в строке и возвращает первый найденный.

20 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 117 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир