Task Livecoding Check Palindrome

2. Проверить, является ли строка палиндромом? #

"A man, a plan, a canal, Panama!"
Спойлеры к решению
Подсказки
  • Палиндром — это строка, которая читается одинаково как слева направо, так и справа налево.
  • Нужно учесть, что пробелы, знаки препинания и регистр символов не имеют значения при проверке.
  • Можно использовать два указателя: один с начала строки, другой с конца, и проверять, совпадают ли символы, игнорируя пробелы и знаки препинания.
Решение

Для решения задачи можно использовать регулярные выражения для удаления всего, что не является буквами или цифрами, а затем сравнить строку с её обратной версией.

class Main {
    public static void main(String[] args) {
        String text = "A man, a plan, a canal, Panama!";

        // Преобразуем строку в нижний регистр и удаляем все ненужные символы
        String cleanedText = text.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();

        // Проверяем, равна ли строка своему обратному представлению
        if (isPalindrome(cleanedText)) {
            System.out.println("Строка является палиндромом");
        } else {
            System.out.println("Строка не является палиндромом");
        }
    }

    // Метод для проверки, является ли строка палиндромом
    public static boolean isPalindrome(String text) {
        int left = 0;
        int right = text.length() - 1;
        
        while (left < right) {
            if (text.charAt(left) != text.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}

Что делает код:

  1. Мы убираем все символы, которые не являются буквами или цифрами, с помощью регулярного выражения replaceAll("[^a-zA-Z0-9]", "").
  2. Преобразуем строку в нижний регистр, чтобы игнорировать регистр.
  3. Метод isPalindrome проверяет, совпадают ли символы с обеих сторон строки (сначала и с конца).

Результат для строки "A man, a plan, a canal, Panama!":

Строка является палиндромом

Палиндром проверен успешно, так как после очистки и приведения к единому регистру строка становится "amanaplanacanalpanama", которая читается одинаково в обоих направлениях. ✅