Разбор задачи: Уникальные адреса электронной почты

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

 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"].

  1. Первый адрес:
    • Локальная часть: "test.email+alex" → Убираем "+" и ".", получаем "testemail".
    • Полный адрес: "testemail@leetcode.com".
    • Добавляем в множество: {"testemail@leetcode.com"}.
  2. Второй адрес:
    • Локальная часть: "test.e.mail+bob.cathy" → Убираем "+" и ".", получаем "testemail".
    • Полный адрес: "testemail@leetcode.com".
    • Уже существует в множестве, пропускаем.
  3. Третий адрес:
    • Локальная часть: "testemail+david" → Убираем "+", получаем "testemail".
    • Полный адрес: "testemail@lee.tcode.com".
    • Добавляем в множество: {"testemail@leetcode.com", "testemail@lee.tcode.com"}.

Результат: два уникальных адреса.

 



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