每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成,以 '@' 符号分隔。除小写字母之外,电子邮件地址还可以含有一个或多个 '.' 或 '+' 。
- 例如,在
alice@leetcode.com中,alice是 本地名 ,而leetcode.com是 域名 。
如果在电子邮件地址的 本地名 部分中的某些字符之间添加句点('.'),则发往那里的邮件将会转发到本地名中没有点的同一地址。请注意,此规则 不适用于域名 。
- 例如,
"alice.z@leetcode.com”和“alicez@leetcode.com”会转发到同一电子邮件地址。
如果在 本地名 中添加加号('+'),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件。同样,此规则 不适用于域名 。
- 例如
m.y+name@email.com将转发到my@email.com。
可以同时使用这两个规则。
给你一个字符串数组 emails,我们会向每个 emails[i] 发送一封电子邮件。返回实际收到邮件的不同地址数目。
class Solution {
public:
int numUniqueEmails(vector<string>& emails) {
//定义哈希表存储不同的邮箱
unordered_set<string> local;
//遍历输入的邮箱
for(auto i=0;i<emails.size();i++){
//存储当前处理后的邮箱
string s;
//是否要忽略
bool ignore=false;
//是否找到@
bool atFound=false;
//遍历当前邮箱
for(int j=0;j<emails[i].size();j++){
//如果当前为'.'且未找到@
if(emails[i][j]=='.'&&!atFound){
//跳出本轮循环
continue;
}
//如果当前为'+'
if(emails[i][j]=='+'){
//忽略@前的所有
ignore=true;
}
//如果找到了@
if(emails[i][j]=='@'){
//不忽略接下来的字符
ignore=false;
//找到@
atFound=true;
}
//如果不忽略或者找到了@
if(!ignore||atFound){
//将当前字符插入处理后邮箱的字符串
s.push_back(emails[i][j]);
}
}
//将处理后的邮箱加入哈希表
local.emplace(s);
}
//返回哈希表长度
return local.size();
}
};
663

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



