Every email consists of a local name and a domain name, separated by the @ sign.
For example, in [email protected]
, alice
is the local name, and leetcode.com
is the domain name.
Besides lowercase letters, these emails may contain '.'
s or '+'
s.
If you add periods ('.'
) between some characters in the local name part of an email address, mail sent there will be forwarded to the same address without dots in the local name. For example, "[email protected]"
and "[email protected]"
forward to the same email address. (Note that this rule does not apply for domain names.)
If you add a plus ('+'
) in the local name, everything after the first plus sign will be ignored. This allows certain emails to be filtered, for example [email protected]
will be forwarded to [email protected]
. (Again, this rule does not apply for domain names.)
It is possible to use both of these rules at the same time.
Given a list of emails
, we send one email to each address in the list. How many different addresses actually receive mails?
Input: ["[email protected]","[email protected]","[email protected]"] Output: "[email protected]" and "[email protected]" actually receive mails
1 <= emails[i].length <= 100
1 <= emails.length <= 100
- Each
emails[i]
contains exactly one'@'
character. - All local and domain names are non-empty.
- Local names do not start with a
'+'
character.
class Solution:
def numUniqueEmails(self, emails: List[str]) -> int:
result = set()
for email in emails:
localname, domainname = email.split('@')
localname = localname.replace('.', '')
if '+' in localname:
localname = localname[:localname.find('+')]
result.add('@'.join([localname, domainname]))
return len(result)
# @param {String[]} emails
# @return {Integer}
def num_unique_emails(emails)
ret = Set.new
for email in emails
localname, domainname = email.split('@')
localname.gsub!('.', '')
if localname.include?('+')
localname = localname[0...(localname.index('+'))]
end
ret.add([localname, domainname].join('@'))
end
return ret.length
end