Определение палиндромности строки

После удаления не буквенно-цифровых символов сравнивайте значения с двух концов, игнорируя регистр. В качестве единицы символа можно использовать Unicode code point.

Короткий ответ

Что ответить на собеседовании

После удаления не буквенно-цифровых символов сравнивайте значения с двух концов, игнорируя регистр. В качестве единицы символа можно использовать Unicode code point.

Подробный разбор

Ответ с пояснениями

Условие

Вводится строка s. Требуется проверить, является ли она палиндромом. При этом необходимо выполнить два шага:

  1. Привести все заглавные символы к нижнему регистру.
  2. Удалить из строки все символы, не являющиеся буквами или цифрами. После выполнения этих преобразований строка считается палиндромом, если её последовательность символов одинаково читается слева направо и справа налево.
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; специфические лингвистические правила сравнения при необходимости задаются отдельно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее