Отфильтруйте буквы и цифры, приведите их к одному регистру и сравните пары с противоположных концов. После фильтрации пустая последовательность считается палиндромом.
Проверка строки на палиндромность
Отфильтруйте буквы и цифры, приведите их к одному регистру и сравните пары с противоположных концов. После фильтрации пустая последовательность считается палиндромом.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо определить, является ли заданная строка палиндромом. Палиндром — это последовательность символов, одинаково читаемая слева направо и справа налево (включая пустую строку).
При проверке следует:
- Рассматривать только буквенно-цифровые символы.
- Игнорировать пробелы, пунктуацию и регистр букв.
Ответ
Отфильтруйте буквы и цифры, приведите их к одному регистру и сравните пары с противоположных концов. После фильтрации пустая последовательность считается палиндромом.
static boolean isPalindrome(String text) {
java.util.Objects.requireNonNull(text);
int[] chars = text.codePoints()
.filter(Character::isLetterOrDigit)
.map(Character::toLowerCase).toArray();
for (int l = 0, r = chars.length - 1; l < r; l++, r--)
if (chars[l] != chars[r]) return false;
return true;
}
Время O(n), память O(n). Обработка через code points поддерживает символы за пределами базовой Unicode-плоскости. Это простое Unicode-приведение регистра, не полноценная лингвистическая нормализация или case folding с заменой одного символа несколькими.