После удаления не буквенно-цифровых символов сравнивайте значения с двух концов, игнорируя регистр. В качестве единицы символа можно использовать Unicode code point.
Определение палиндромности строки
После удаления не буквенно-цифровых символов сравнивайте значения с двух концов, игнорируя регистр. В качестве единицы символа можно использовать Unicode code point.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Вводится строка s. Требуется проверить, является ли она палиндромом. При этом необходимо выполнить два шага:
- Привести все заглавные символы к нижнему регистру.
- Удалить из строки все символы, не являющиеся буквами или цифрами. После выполнения этих преобразований строка считается палиндромом, если её последовательность символов одинаково читается слева направо и справа налево.
class Solution {
public boolean isPalindrome(String s) {
return false;
}
}
Ответ
После удаления не буквенно-цифровых символов сравнивайте значения с двух концов, игнорируя регистр. В качестве единицы символа можно использовать Unicode code point.
public boolean isPalindrome(String s) {
java.util.Objects.requireNonNull(s);
int[] chars = s.codePoints().filter(Character::isLetterOrDigit)
.map(Character::toLowerCase).toArray();
int left = 0, right = chars.length - 1;
while (left < right) {
if (chars[left++] != chars[right--]) return false;
}
return true;
}
Пустая строка и строка только из пунктуации дают true. Время O(n), память O(n). Character.toLowerCase выполняет простое приведение отдельного code point; специфические лингвистические правила сравнения при необходимости задаются отдельно.