929. Unique Email Addresses
Description
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?
Constraints
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.
Approach
Links
GeeksforGeeks
ProgramCreek
YouTube
Examples
Input: ["[email protected]", "[email protected]", "[email protected]"]
Output: 2
Explanation: "[email protected]" and "[email protected]" actually receive mails
Solutions
/**
* Time complexity :
* Space complexity :
*/
class Solution {
public int numUniqueEmails(String[] emails) {
if(emails == null || emails.length == 0) return 0;
Set<String> emailSet = new HashSet();
for(String email: emails) {
StringBuilder emailSB = new StringBuilder();
int i = 0;
char ch = email.charAt(i);
boolean flag = true;
while(ch != '@') {
if(ch == '+') flag = false;
if(flag && ch != '.') emailSB.append(ch);
ch = email.charAt(++i);
}
emailSB.append(email.substring(i));
emailSet.add(emailSB.toString());
}
return emailSet.size();
}
}
Follow up
Last updated
Was this helpful?