天天看點

LeetCode 929. 獨特的電子郵件位址

1. 題目

每封電子郵件都由一個本地名稱和一個域名組成,以 @ 符号分隔。

例如,在

[email protected]

中, alice 是本地名稱,而 leetcode.com 是域名。

除了小寫字母,這些電子郵件還可能包含 ‘.’ 或 ‘+’。

如果在電子郵件位址的本地名稱部分中的某些字元之間添加句點(’.’),則發往那裡的郵件将會轉發到本地名稱中沒有點的同一位址。

例如,

"[email protected]

[email protected]

會轉發到同一電子郵件位址。 (請注意,此規則不适用于域名。)

如果在本地名稱中添加加号

('+')

,則會忽略第一個加号後面的所有内容。

這允許過濾某些電子郵件,例如

[email protected]

将轉發到

[email protected]

。 (同樣,此規則不适用于域名。)

可以同時使用這兩個規則。

給定電子郵件清單 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