[leetcode]獨特的電子郵件地址
阿新 • • 發佈:2018-11-24
929. 獨特的電子郵件地址
每封電子郵件都由一個本地名稱和一個域名組成,以 @ 符號分隔。
例如,在 [email protected]中, alice 是本地名稱,而 leetcode.com 是域名。
除了小寫字母,這些電子郵件還可能包含 ‘,’ 或 ‘+’。
如果在電子郵件地址的本地名稱部分中的某些字元之間新增句點(’.’),則發往那裡的郵件將會轉發到本地名稱中沒有點的同一地址。例如,"[email protected]” 和 “[email protected]” 會轉發到同一電子郵件地址。 (請注意,此規則不適用於域名。)
如果在本地名稱中新增加號(’+’),則會忽略第一個加號後面的所有內容。這允許過濾某些電子郵件,例如 [email protected] 將轉發到 [email protected]。 (同樣,此規則不適用於域名。)
可以同時使用這兩個規則。
給定電子郵件列表 emails,我們會向列表中的每個地址傳送一封電子郵件。實際收到郵件的不同地址有多少?
示例:
輸入:["[email protected]","[email protected]","[email protected]"]
輸出:2
解釋:實際收到郵件的是 "teste[email protected]" 和 "[email protected]"。
提示:
- 1 <= emails[i].length <= 100
- 1 <= emails.length <= 100
- 每封 emails[i] 都包含有且僅有一個 ‘@’ 字元。
C++解法:
class Solution {
public:
string UniqueEmail(string email)
{
string ans;
bool emailName = true;
bool domain = false;
for (char c : email)
{
if (c == '@')
{
domain = true;
}
if (domain)
{
ans.push_back(c);
}
else
{
if (c == '+')
{
emailName = false;
}
else if (c == '.')
{
continue;
}
else if (emailName)
{
ans.push_back(c);
}
}
}
return ans;
}
int numUniqueEmails(vector<string>& emails) {
set<string> ans;
for ( string &s : emails)
{
s = UniqueEmail(s);
}
for (string s : emails)
{
ans.insert(s);
}
return ans.size();
}
};