Программа курса:
Разбор задачи:
Предложенный нами код решения:
def shortestCompletingWord(licensePlate: str, words: list[str]) -> str:
"""
:param licensePlate: Строка, содержащая буквы, цифры и пробелы.
:param words: Список строк, среди которых нужно найти подходящее слово.
:return: Кратчайшее слово, которое содержит все буквы из licensePlate.
"""
# Извлекаем буквы из licensePlate, игнорируя цифры и пробелы, приводим к нижнему регистру.
license_letters = {}
for char in licensePlate.lower():
if char.isalpha():
license_letters[char] = license_letters.get(char, 0) + 1
# Поиск кратчайшего подходящего слова.
result = None
for word in words:
word_letters = {}
for char in word: # Подсчет букв в текущем слове.
word_letters[char] = word_letters.get(char, 0) + 1
# Проверяем, содержит ли слово все буквы из licensePlate в нужном количестве.
if all(word_letters.get(char, 0) >= count for char, count in license_letters.items()):
if result is None or len(word) < len(result): # Обновляем результат, если слово короче.
result = word
return result1. Аргументы функции
root: объект классаNode, представляющий корень дерева. У него есть два атрибута:val: значение текущего узла (не используется в решении, но может быть полезным для других задач).children: список дочерних узлов (может быть пустым, если узел является листом).
2. Базовые случаи
a. Если корень дерева отсутствует
if not root: # Если корня нет, глубина равна 0
return 0
- Если
rootравенNone, то дерево пустое. - Глубина в этом случае равна
0.
b. Если узел не имеет дочерних узлов
if not root.children: # Если у узла нет детей, глубина равна 1
return 1
- Если
children— пустой список, это означает, что узел является листом. - Глубина такого дерева равна
1.
3. Рекурсивный случай
a. Рекурсия по всем дочерним узлам
max(maxDepth(child) for child in root.children)
- Для каждого дочернего узла из списка
childrenвызывается функцияmaxDepth, чтобы вычислить глубину поддерева, начинающегося с этого дочернего узла. max(...)возвращает максимальное значение из всех глубин дочерних узлов.
b. Увеличение глубины на 1
return 1 + max(...)
- Добавляем
1к максимальной глубине поддеревьев, так как текущий узел также добавляет один уровень к дереву.
4. Возврат результата
Функция возвращает максимальную глубину дерева, начиная с корневого узла.
Пример работы функции
Входные данные:
Дерево:
1
/ | \
3 2 4
/ \
5 6
Код для создания дерева:
root = Node(1, [
Node(3, [Node(5), Node(6)]),
Node(2),
Node(4)
])
Выполнение функции:
maxDepth(root)вызываетmaxDepthдля узлов3,2, и4.- Для узла
3вызываетсяmaxDepthдля узлов5и6. - Для узлов
5и6возвращается1, так как они листовые. - Для узла
3возвращается1 + max(1, 1) = 2. - Для узлов
2и4возвращается1, так как они листовые. - Для корня
1возвращается1 + max(2, 1, 1) = 3.
xsnm
,Добрый. Ошибка на странице.
Filaret
,Добрый день. В начале страницы - код для решения одной из предыдущих задач. Для данной задачи код приведен только в построчном разборе.