Всем привет,

Это четвертый день решения проблем с JavaScript.

Сегодня я объясню решение для уникальных адресов электронной почты в LeetCode.

В чем проблема с уникальными адресами электронной почты?

Учитывая массив строк emails, где мы отправляем по одному электронному письму каждому emails[i], возвращаем количество различных адресов, которые фактически получают письма

Чтобы определить количество различных адресов электронной почты, нам сначала нужно определить действительный адрес электронной почты.

  1. Действительный адрес электронной почты состоит из местного имени и доменного имени, разделенных знаком '@'. Помимо строчных букв, электронное письмо может содержать один или несколько '.' или '+'. Например, в "[email protected]" "alice" — это местное имя, а "leetcode.com" — это доменное имя.
  2. Если вы добавите точки '.' между некоторыми символами в части местного имени адреса электронной почты, отправленная туда почта будет пересылаться на тот же адрес без точек в локальном имени. Обратите внимание, что это правило не применяется к доменным именам. Например, "[email protected]" и "[email protected]" пересылаются на один и тот же адрес электронной почты.
  3. Если вы добавите плюс '+' к местному имени, все после первого плюса будет игнорироваться. Это позволяет фильтровать определенные электронные письма. Обратите внимание, что это правило не применяется к доменным именам. Например, "[email protected]" будет переадресован на "[email protected]".

Можно использовать оба этих правила одновременно.

Пример 1:

Input: emails = ["[email protected]","[email protected]","[email protected]"]
Output: 2
Explanation: "[email protected]" and "[email protected]" actually receive mails.

Пример 2:

Input: emails = ["[email protected]","[email protected]","[email protected]"]
Output: 3

Решение

Ссылка на репозиторий GitHub — https://github.com/Starboy369/JSProblemSolving (Отметьте мой репозиторий звездочкой, чтобы найти все решения на JavaScript)

Фрагмент кода

var numUniqueEmails = function(emails) {
         let arr = new Set()
    console.log(emails)
    for(var i in emails){
        console.log(emails[i])
        let [name, subdomain]=emails[i].split("@")
        name=name.replace(/\./g,"")
        
        name = name.split("+")[0]
       // console.log(name)
        name = name+"@"+subdomain
        //console.log(subdomain)
        arr.add(name)
       // console.log(arr)
        console.log(arr.size)
       
    }
     return arr.size
};

Используемые понятия

  1. Наборы — набор JavaScript представляет собой набор уникальных значений. Каждое значение может встречаться в наборе только один раз. Это означает, что Set не допускает дубликатов.
  2. Регулярное выражение. Регулярное выражение представляет собой шаблон символов. Шаблон используется для сопоставления с шаблоном функций «поиска и замены» в тексте. В JavaScript элемент Объект RegExp — это шаблон с Свойствами и Методами.

Пояснение кода

  1. Я создал переменную arr как Set. Я повторил массив электронной почты и создал две переменные — «имя» и «субдомен» и инициализировал значение из электронной почты.
  2. Я использовал регулярное выражение для точки (.) — «/\./g», чтобы удалить ее появление из строки.
  3. Затем я добавил результат имени и поддомена в набор, используя метод add.
  4. Наконец, я вернул размер набора, чтобы получить количество уникальных адресов электронной почты.

Заключение

Описанным выше способом мы можем решить эту проблему, используя Set и Regex.

И, как обычно, дайте мне знать, если есть лучший подход к решению этой проблемы. Рад учиться у всех вас!

Я буду каждый день публиковать блоги с проблемами, решенными в JavaScript. Следуйте за мной, чтобы никогда не пропустить решение.

Удачного кодирования на JavaScript!!!