Программа курса:
Разбор задачи:
Предложенный нами код решения:
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)
Шаги решения:
Создание таблицы кодов Морзе: В начале функции задается список
morse_table, содержащий коды Морзе для всех 26 букв английского алфавита. Индекс каждого элемента соответствует порядковому номеру буквы (например,aсоответствует индексу 0,b— индексу 1, и так далее).morse_table = [ ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." ]Преобразование слов в код Морзе: Для каждого слова из списка
wordsсоздается строка, которая является последовательностью кодов Морзе для каждой буквы этого слова. Это достигается с помощью:- Цикла, который перебирает буквы в слове.
- Вычисления индекса символа через
ord(char) - ord('a'), гдеord(char)возвращает числовое значение символа в таблице Unicode. - Объединения последовательности кодов Морзе в одну строку с помощью
"".join(...).
Пример:
Для слова"gin":g->--.,i->..,n->-..- Преобразование:
"--...-.".
Сохранение уникальных преобразований: Для хранения уникальных строк используется множество (
set). Множество автоматически исключает повторяющиеся элементы. Каждое преобразование добавляется в множество:transformations = {"".join(morse_table[ord(char) - ord('a')] for char in word) for word in words}- Возврат результата: После обработки всех слов функция возвращает количество элементов в множестве
transformations, которое и является количеством уникальных преобразований.
Пример работы: Для списка слов ["gin", "zen", "gig", "msg"]:
- Преобразования:
"gin"->"--...-.""zen"->"--...-.""gig"->"--...--.""msg"->"--...--." - Уникальные преобразования:
"--...-.","--...--.". - Результат: 2.