929. 獨特的電子郵件地址

每個 有效電子郵件地址 都由一個 本地名 和一個 域名 組成,以 '@' 符號分隔。除小寫字母之外,電子郵件地址還可以含有一個或多個 '.''+'

  • 例如,在 alice@leetcode.com中, alice 是 本地名 ,而 leetcode.com 是 域名

如果在電子郵件地址的 本地名 部分中的某些字符之間添加句點('.'),則發往那裏的郵件將會轉發到本地名中沒有點的同一地址。請注意,此規則 不適用於域名

  • 例如,"alice.z@leetcode.com”“alicez@leetcode.com” 會轉發到同一電子郵件地址。

如果在 本地名 中添加加號('+'),則會忽略第一個加號後面的所有內容。這允許過濾某些電子郵件。同樣,此規則 不適用於域名

  • 例如 m.y+name@email.com 將轉發到 my@email.com

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

給你一個字符串數組 emails,我們會向每個 emails[i] 發送一封電子郵件。返回實際收到郵件的不同地址數目。

 

示例 1:

輸入:emails = ["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
輸出:2
解釋:實際收到郵件的是 "testemail@leetcode.com" 和 "testemail@lee.tcode.com"。

示例 2:

輸入:emails = ["a@leetcode.com","b@leetcode.com","c@leetcode.com"]
輸出:3

提示:

  • 1 <= emails.length <= 100
  • 1 <= emails[i].length <= 100
  • emails[i] 由小寫英文字母、'+''.''@' 組成
  • 每個 emails[i] 都包含有且僅有一個 '@' 字符
  • 所有本地名和域名都不為空
  • 本地名不會以 '+' 字符作為開頭
class Solution {
    public int numUniqueEmails(String[] emails) {
        
        Set<String> emailSet = new HashSet<String>();
        
        for (String email : emails) {
            int i = email.indexOf('@');
            String domainPart = email.substring(i);
            int a = email.indexOf('+');
            if (a == -1) a = i; // 若無'+'號,則將a置為i,截取@前所有內容
            String localPart = email.substring(0,a);
            localPart = localPart.replace(".","");   
            emailSet.add(localPart+domainPart);
        }

        return emailSet.size();
    }
}