Разбор задачи: Валидная анаграмма

Предложенный нами код решения:

def is_anagram(s, t):
    """
    Проверяет, является ли строка t анаграммой строки s.
    
    :param s: строка s
    :param t: строка t
    :return: True, если t является анаграммой s, иначе False
    """
    # Если длины строк не равны, они не могут быть анаграммами
    if len(s) != len(t):
        return False
    
    # Сортируем обе строки и сравниваем
    return sorted(s) == sorted(t)

Шаг 1: Проверка длины строк

if len(s) != len(t):
    return False

Прежде чем приступить к более сложным операциям, мы сначала проверяем длины строк s и t. Если длины этих строк различны, то они не могут быть анаграммами, так как для того, чтобы строки были анаграммами, они должны состоять из одинакового числа символов. В случае, если длины строк не равны, функция сразу возвращает False.

Шаг 2: Сортировка строк

return sorted(s) == sorted(t)

Затем мы сортируем обе строки с помощью функции sorted(). Эта функция возвращает отсортированный список символов строки. Если строки являются анаграммами, то после сортировки их символы будут в одном и том же порядке.

  • Почему сортировка решает задачу? Анаграмма — это просто перестановка символов. Поэтому если отсортированные строки идентичны, значит, одна строка является перестановкой другой, и они являются анаграммами.

Если отсортированные строки совпадают, то функция возвращает True, что подтверждает, что строки являются анаграммами. В противном случае возвращается False.

Пример:

  1. Пример 1:

    s = "listen"
    t = "silent"
    
    • После сортировки sorted(s) и sorted(t) будут равны: ['e', 'i', 'l', 'n', 's', 't'].
    • Результат: True, так как строки являются анаграммами.
  2. Пример 2:

    s = "rat"
    t = "car"
    
    • После сортировки sorted(s) будет ['a', 'r', 't'], а sorted(t)['a', 'c', 'r'].
    • Результат: False, так как отсортированные строки не совпадают.

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии