1. 題目
每封電子郵件都由一個本地名稱和一個域名組成,以 @ 符号分隔。
例如,在
中, alice 是本地名稱,而 leetcode.com 是域名。
除了小寫字母,這些電子郵件還可能包含 ‘.’ 或 ‘+’。
如果在電子郵件位址的本地名稱部分中的某些字元之間添加句點(’.’),則發往那裡的郵件将會轉發到本地名稱中沒有點的同一位址。
例如,
和
會轉發到同一電子郵件位址。 (請注意,此規則不适用于域名。)
如果在本地名稱中添加加号
('+')
,則會忽略第一個加号後面的所有内容。
這允許過濾某些電子郵件,例如
将轉發到
。 (同樣,此規則不适用于域名。)
可以同時使用這兩個規則。
給定電子郵件清單 emails,我們會向清單中的每個位址發送一封電子郵件。
實際收到郵件的不同位址有多少?
示例:
輸入:["[email protected]",
"[email protected]",
"[email protected]"]
輸出:2
解釋:實際收到郵件的是 "[email protected]"
和 "[email protected]"。
提示:
1 <= emails[i].length <= 100
1 <= emails.length <= 100
每封 emails[i] 都包含有且僅有一個 '@' 字元。
複制
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/unique-email-addresses
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
-
和+
之間的 忽略@
-
符号前面的@
忽略.
class Solution {
public:
int numUniqueEmails(vector<string>& emails) {
set<string> s;
string str;
int i, j;
bool meetAt, meetPlus;
for(i = 0; i < emails.size(); ++i)
{
meetPlus = meetAt = false;
str = "";
for(j = 0; j < emails[i].size(); ++j)
{
if(emails[i][j] == '+')
meetPlus = true;
else if(emails[i][j] == '@')
{
meetAt = true;
}
if(!meetAt && !meetPlus && emails[i][j] != '.')
str.push_back(emails[i][j]);//沒遇到@ + 不是 .
if(meetAt)//@ 之後的不處理
str.push_back(emails[i][j]);
}
s.insert(str);
}
return s.size();
}
};
複制
28 ms 11.5 MB