1. 程式人生 > >leetcode.929 獨特的電子郵件地址

leetcode.929 獨特的電子郵件地址

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

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

解題思路:

首先想到的是分割字元,以 @ 符號分割為兩部分再進行處理,分割字元用的是 substring(int i,int j) 方法,返回字串中 i 到 j(包含 i,不包含 j) 的字串,然後將前半部分再按照題意進行處理,遇到 + 忽略後面的字元,遇到 . 覆蓋這個字元。

最後將處理後的字串拼接起來加入 set 中,利用 set 的不可重複性,返回其大小即可。

程式碼:

class Solution {
    public int numUniqueEmails(String[] emails) {
        Set<String> set = new HashSet<>();
        for(String email : emails){
            String name = email.substring(0,email.indexOf("@"));
            String domain = email.substring(email.indexOf("@"));
            String a = name.substring(0,email.indexOf("+")).replace(".","");
            set.add(a + domain);
        }
       return set.size();
    }
}