Проблема в вашем коде заключается в том, что он не учитывает возможность наличия нескольких палиндромов максимальной длины в строке.
Для решения этой проблемы можно модифицировать ваш код, чтобы он сохранял все найденные палиндромы максимальной длины и вернул их все.
Также можно улучшить алгоритм, чтобы он был более эффективным. Например, можно использовать метод расширения палиндромов (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; }
Этот код ищет все палиндромы максимальной длины в строке и возвращает первый найденный.
Проблема в вашем коде заключается в том, что он не учитывает возможность наличия нескольких палиндромов максимальной длины в строке.
std::string longestPalindromeSubstr(string s) {Для решения этой проблемы можно модифицировать ваш код, чтобы он сохранял все найденные палиндромы максимальной длины и вернул их все.
Также можно улучшить алгоритм, чтобы он был более эффективным. Например, можно использовать метод расширения палиндромов (expand around center), который быстрее и проще в реализации, чем текущий подход.
Используйте следующую функцию для поиска палиндромов максимальной длины в строке:
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;
}
Этот код ищет все палиндромы максимальной длины в строке и возвращает первый найденный.