Программа курса:
Разбор задачи: Уникальные адреса электронной почты
Предложенный нами код решения:
def numUniqueEmails(emails):
"""
:type emails: List[str]
:rtype: int
"""
unique_emails = set() # Множество для хранения уникальных адресов
for email in emails:
local, domain = email.split('@') # Разделяем локальную часть и домен
# Убираем всё после '+' в локальной части и заменяем '.' на пустую строку
local = local.split('+')[0].replace('.', '')
# Формируем уникальный адрес
unique_emails.add(f"{local}@{domain}")
return len(unique_emails)1. Зачем нам множество unique_emails?
- В Python множество (
set) автоматически удаляет дубликаты. Это удобно для хранения уникальных email-адресов, так как одинаковые адреса с учётом правил обработки добавятся только один раз.
2. Как обрабатывается каждый email?
Цикл for email in emails перебирает все адреса из списка. Для каждого адреса выполняются следующие действия:
a. Разделение на локальную часть и домен
local, domain = email.split('@')
- Адрес делится на две части:
local— часть перед символом'@'.domain— часть после символа'@'.
b. Удаление ненужных символов в локальной части
local = local.split('+')[0].replace('.', '')
split('+'): Всё, что идёт после символа'+', игнорируется. Берётся только часть до'+'.replace('.', ''): Убираются все точки ('.') из локальной части, так как они не влияют на адрес.
Пример:
test.email+alex@leetcode.comпревращается вtestemail@leetcode.com.
c. Формирование полного адреса
unique_emails.add(f"{local}@{domain}")
- Локальная часть объединяется с доменом для формирования полного адреса, который добавляется в множество.
3. Возвращение результата
return len(unique_emails)
- После обработки всех адресов в множестве
unique_emailsостаются только уникальные. Возвращается их количество с помощью функцииlen().
Пример работы
Возьмём список адресов:emails = ["test.email+alex@leetcode.com", "test.e.mail+bob.cathy@leetcode.com", "testemail+david@lee.tcode.com"].
- Первый адрес:
- Локальная часть:
"test.email+alex"→ Убираем"+"и".", получаем"testemail". - Полный адрес:
"testemail@leetcode.com". - Добавляем в множество:
{"testemail@leetcode.com"}.
- Локальная часть:
- Второй адрес:
- Локальная часть:
"test.e.mail+bob.cathy"→ Убираем"+"и".", получаем"testemail". - Полный адрес:
"testemail@leetcode.com". - Уже существует в множестве, пропускаем.
- Локальная часть:
- Третий адрес:
- Локальная часть:
"testemail+david"→ Убираем"+", получаем"testemail". - Полный адрес:
"testemail@lee.tcode.com". - Добавляем в множество:
{"testemail@leetcode.com", "testemail@lee.tcode.com"}.
- Локальная часть:
Результат: два уникальных адреса.
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии