1. 程式人生 > >leetcode 929. 獨特的電子郵件地址(Unique Email Addresses)

leetcode 929. 獨特的電子郵件地址(Unique Email Addresses)

ali 多少 order for 我們 輸入 vector address test

目錄

  • 題目描述:
  • 示例:
  • 解法:

題目描述:

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

例如,在 [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] 都包含有且僅有一個 ‘@‘ 字符。

解法:

class Solution {
public:
    string process(string s){
        int sz = s.size();
        string local = "";
        string domain = "";
        int i = 0;
        while(i < sz && s[i] != '@'){
            i++;
        }
        domain = s.substr(i);
        int j = 0;
        while(j < i && s[j] != '+'){
            if(s[j] != '.'){
                local += s[j];
            }
            j++;
        }
        return local + domain;
    }
    
    int numUniqueEmails(vector<string>& emails) {
        unordered_set<string> st;
        for(string email : emails){
            st.insert(process(email));
        }
        return st.size();
    }
};

leetcode 929. 獨特的電子郵件地址(Unique Email Addresses)