Напишите функцию на Go, которая проверяет, является ли заданная строка палиндромом. Функция должна игнорировать регистр и пробелы. Кроме того, специальные символы также должны игнорироваться. Например, строка "A man, a plan, a canal: Panama" должна считаться палиндромом.

Оставьте только буквы и цифры, приведите их к одному регистру и сравните символы с двух концов. Для Unicode используйте rune, а не байты.

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

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

Оставьте только буквы и цифры, приведите их к одному регистру и сравните символы с двух концов. Для Unicode используйте rune, а не байты.

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

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

Оставьте только буквы и цифры, приведите их к одному регистру и сравните символы с двух концов. Для Unicode используйте rune, а не байты.

Вариант на Go с простым приведением Unicode к нижнему регистру:

import "unicode"

func isPalindrome(s string) bool {
    normalized := make([]rune, 0, len(s))
    for _, r := range s {
        if unicode.IsLetter(r) || unicode.IsDigit(r) {
            normalized = append(normalized, unicode.ToLower(r))
        }
    }
    for i, j := 0, len(normalized)-1; i < j; i, j = i+1, j-1 {
        if normalized[i] != normalized[j] { return false }
    }
    return true
}

Пустая после фильтрации строка считается палиндромом. Время и дополнительная память O(n). Полное Unicode case folding и нормализация составных символов здесь не выполняются; для заданного латинского примера результат true.

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

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

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

Подробнее