Для каждой записи добавьте счётчик ко всем суффиксам домена, разделённым точками. Накопленные значения преобразуйте обратно в строки.
Подсчёт посещений субдоменов
Для каждой записи добавьте счётчик ко всем суффиксам домена, разделённым точками. Накопленные значения преобразуйте обратно в строки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Имя веб‑сайта, например "discuss.leetcode.com", состоит из нескольких уровней доменов. Самый верхний уровень — это "com", следующий — "leetcode.com", а самый нижний — "discuss.leetcode.com". При обращении к полному домену, например к "discuss.leetcode.com", автоматически считается, что были посещены и его родительские домены "leetcode.com" и "com".
Запись с подсчётом посещений имеет один из двух форматов: "cnt d1.d2.d3" или "cnt d1.d2", где cnt — количество обращений, а d1.d2.d3 — само доменное имя.
К примеру, строка "9001 discuss.leetcode.com" означает, что домен discuss.leetcode.com был открыт 9001 раз.
Дан массив строк domainsList, каждая из которых содержит запись с подсчётом посещений. Необходимо вернуть массив строк, где каждая строка отражает суммарное количество посещений для каждого субдомена, встречающегося во входных данных. Порядок строк в ответе не важен.
Example 1: Input: domainsList = ["9001 discuss.leetcode.com"] Output: ["9001 leetcode.com","9001 discuss.leetcode.com","9001 com"] Explanation: В входных данных присутствует единственный домен "discuss.leetcode.com". Как было описано выше, его субдомены "leetcode.com" и "com" также считаются посещёнными, поэтому каждый из них получает тот же счёт 9001.
Example 2: Input: domainsList = ["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"] Output: ["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"] Explanation: Мы посещаем "google.mail.com" 900 раз, "yahoo.com" 50 раз, "intel.mail.com" один раз и "wiki.org" 5 раз. Для субдоменов получаем: "mail.com" — 900 + 1 = 901, "com" — 900 + 50 + 1 = 951, "org" — 5.
Ответ
Для каждой записи добавьте счётчик ко всем суффиксам домена, разделённым точками. Накопленные значения преобразуйте обратно в строки.
from collections import Counter
def subdomain_visits(domainsList):
counts = Counter()
for record in domainsList:
count_text, domain = record.split()
count = int(count_text)
if count < 0:
raise ValueError('Отрицательное число посещений')
parts = domain.split('.')
for index in range(len(parts)):
counts['.'.join(parts[index:])] += count
return [f'{count} {domain}' for domain, count in counts.items()]
Для discuss.leetcode.com учитываются три суффикса. Это правило учебной агрегации, а не утверждение, что браузер реально отправил отдельные запросы ко всем родительским доменам. Порядок результата не важен. Корректность доменных имён предполагается проверенной на входе.