Разбор задачи:

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

 def uniqueMorseRepresentations(words):
    """
    :type words: List[str]
    :rtype: int
    """
    morse_table = [
        ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---",
        "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-",
        "..-", "...-", ".--", "-..-", "-.--", "--.."
    ]
    transformations = {"".join(morse_table[ord(char) - ord('a')] for char in word) for word in words}
    return len(transformations)

Шаги решения:

  1. Создание таблицы кодов Морзе: В начале функции задается список morse_table, содержащий коды Морзе для всех 26 букв английского алфавита. Индекс каждого элемента соответствует порядковому номеру буквы (например, a соответствует индексу 0, b — индексу 1, и так далее).

    morse_table = [
        ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---",
        "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-",
        "..-", "...-", ".--", "-..-", "-.--", "--.."
    ]
    
  2. Преобразование слов в код Морзе: Для каждого слова из списка words создается строка, которая является последовательностью кодов Морзе для каждой буквы этого слова. Это достигается с помощью:

    • Цикла, который перебирает буквы в слове.
    • Вычисления индекса символа через ord(char) - ord('a'), где ord(char) возвращает числовое значение символа в таблице Unicode.
    • Объединения последовательности кодов Морзе в одну строку с помощью "".join(...).

    Пример:
    Для слова "gin":

    • g -> --., i -> .., n -> -..
    • Преобразование: "--...-.".
  3. Сохранение уникальных преобразований: Для хранения уникальных строк используется множество (set). Множество автоматически исключает повторяющиеся элементы. Каждое преобразование добавляется в множество:

    transformations = {"".join(morse_table[ord(char) - ord('a')] for char in word) for word in words}
    
  4. Возврат результата: После обработки всех слов функция возвращает количество элементов в множестве transformations, которое и является количеством уникальных преобразований.

Пример работы: Для списка слов ["gin", "zen", "gig", "msg"]:

  • Преобразования:
    "gin" -> "--...-."
    "zen" -> "--...-."
    "gig" -> "--...--."
    "msg" -> "--...--."
  • Уникальные преобразования: "--...-.", "--...--.".
  • Результат: 2.

 



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