Mediumpalindromedp
Решить задачу Longest Palindromic Substring (LeetCode 5)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
LeetCode 5. Самый длинный палиндромный подстрок. Expand around center — O(n²) время, O(1) память. 2n-1 центров (n одно-символьных + n-1 между символами).
def longestPalindrome(s):
def expand(l, r):
while l >= 0 and r < len(s) and s[l] == s[r]:
l -= 1
r += 1
return s[l + 1:r]
best = ''
for i in range(len(s)):
odd = expand(i, i) # нечётная длина
even = expand(i, i + 1) # чётная длина
if len(odd) > len(best): best = odd
if len(even) > len(best): best = even
return bestАльтернативы: DP — dp[i][j] = s[i]==s[j] and (j-i<2 or dp[i+1][j-1]), O(n²) время и память. Manacher's algorithm — O(n), exploiting symmetry (редко нужен на интервью). Связанные: Palindromic Substrings (LeetCode 647) — count вместо longest.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.