Назад к вопросам
Intern
101
questionbank
Какой метод позволяет распознавать палиндромы?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Существует несколько подходов.
-
Сравнение строки с её реверсией:
function isPalindrome(string $str): bool { $cleanedStr = strtolower(preg_replace('/[^a-zA-Z0-9]/', '', $str)); // Удаляем знаки препинания и приводим к нижнему регистру return $cleanedStr === strrev($cleanedStr); } -
Двухсторонний проход по строке:
function isPalindromeTwoPointers(string $str): bool { $cleanedStr = strtolower(preg_replace('/[^a-zA-Z0-9]/', '', $str)); $length = strlen($cleanedStr); $left = 0; $right = $length - 1; while ($left < $right) { if ($cleanedStr[$left] !== $cleanedStr[$right]) { return false; } $left++; $right--; } return true; } -
Использование цикла for:
function isPalindromeForLoop(string $str): bool { $cleanedStr = strtolower(preg_replace('/[^a-zA-Z0-9]/', '', $str)); $length = strlen($cleanedStr); $middle = floor($length / 2); for ($i = 0; $i < $middle; $i++) { if ($cleanedStr[$i] !== $cleanedStr[$length - 1 - $i]) { return false; } } return true; }
Все три метода имеют свои преимущества. Первый — наиболее лаконичный. Второй и третий могут быть чуть более эффективны на очень длинных строках, так как не требуется создание полной копии перевернутой строки. Регулярное выражение используется для очистки строки от символов, не являющихся буквами или цифрами, а strtolower обеспечивает регистронезависимое сравнение.