Всем привет,
Это четвертый день решения проблем с JavaScript.
Сегодня я объясню решение для уникальных адресов электронной почты в LeetCode.
В чем проблема с уникальными адресами электронной почты?
Учитывая массив строк emails
, где мы отправляем по одному электронному письму каждому emails[i]
, возвращаем количество различных адресов, которые фактически получают письма
Чтобы определить количество различных адресов электронной почты, нам сначала нужно определить действительный адрес электронной почты.
- Действительный адрес электронной почты состоит из местного имени и доменного имени, разделенных знаком
'@'
. Помимо строчных букв, электронное письмо может содержать один или несколько'.'
или'+'
. Например, в"[email protected]"
"alice"
— это местное имя, а"leetcode.com"
— это доменное имя. - Если вы добавите точки
'.'
между некоторыми символами в части местного имени адреса электронной почты, отправленная туда почта будет пересылаться на тот же адрес без точек в локальном имени. Обратите внимание, что это правило не применяется к доменным именам. Например,"[email protected]"
и"[email protected]"
пересылаются на один и тот же адрес электронной почты. - Если вы добавите плюс
'+'
к местному имени, все после первого плюса будет игнорироваться. Это позволяет фильтровать определенные электронные письма. Обратите внимание, что это правило не применяется к доменным именам. Например,"[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 };
Используемые понятия
- Наборы — набор JavaScript представляет собой набор уникальных значений. Каждое значение может встречаться в наборе только один раз. Это означает, что Set не допускает дубликатов.
- Регулярное выражение. Регулярное выражение представляет собой шаблон символов. Шаблон используется для сопоставления с шаблоном функций «поиска и замены» в тексте. В JavaScript элемент Объект RegExp — это шаблон с Свойствами и Методами.
Пояснение кода
- Я создал переменную arr как Set. Я повторил массив электронной почты и создал две переменные — «имя» и «субдомен» и инициализировал значение из электронной почты.
- Я использовал регулярное выражение для точки (.) — «/\./g», чтобы удалить ее появление из строки.
- Затем я добавил результат имени и поддомена в набор, используя метод add.
- Наконец, я вернул размер набора, чтобы получить количество уникальных адресов электронной почты.
Заключение
Описанным выше способом мы можем решить эту проблему, используя Set и Regex.
И, как обычно, дайте мне знать, если есть лучший подход к решению этой проблемы. Рад учиться у всех вас!
Я буду каждый день публиковать блоги с проблемами, решенными в JavaScript. Следуйте за мной, чтобы никогда не пропустить решение.
Удачного кодирования на JavaScript!!!