题目描述:
Every email consists of a local name and a domain name, separated by the @ sign.
For example, in alice@leetcode.com, 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, "alice.z@leetcode.com" and "alicez@leetcode.com" 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 m.y+name@email.com will be forwarded to my@email.com. (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?
Example 1:
Input: ["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
Output: 2
Explanation: "testemail@leetcode.com" and "testemail@lee.tcode.com" actually receive mails
Note:
• 1 <= emails[i].length <= 100
• 1 <= emails.length <= 100
• Each emails[i] contains exactly one '@' character.
class Solution {
public:
int numUniqueEmails(vector<string>& emails) {
unordered_map<string,bool> hash;
for(int i=0;i<emails.size();i++) hash[convertEmail(emails[i])]=true;
return hash.size();
}
string convertEmail(string s)
{
istringstream iss(s);
string s1;
string s2;
getline(iss,s1,'@');
getline(iss,s2,'@');
string result;
for(int i=0;i<s1.size();i++)
{
if(s1[i]=='.') continue;
else if(s1[i]=='+') break;
else result+=s1[i];
}
return result+s2;
}
};
本文介绍了一种用于解析电子邮件地址的算法,该算法能够识别并处理电子邮件中的特殊字符,如'+'和'.',并解释了如何根据这些规则确定唯一有效的电子邮件地址。通过实例演示,文章展示了算法的工作原理及其实现过程。
419

被折叠的 条评论
为什么被折叠?



