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

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

思路:這是一道簡單難度的題目,題目描述比較直觀, 

    在讀到‘@’ 和 ‘+’, 只要字元不等於‘ . ’  ,將讀到的字元就都放到新的字串裡面

    在讀到‘@’之前 ,如果讀到了‘+’,那麼‘+’和到‘@’之間的字元都不放入新的字串中

    最後如果‘@’已經讀到了,則‘@’和其後的字元都放入新的字串中

    為了節省空間,新的子串直接覆蓋emails[i]處的字串

    之後還要判斷新的字串與前面的字串是否重複,如果存在重複的則cnt--(cnt最開始等於emails中的個數),並且break出迴圈

    程式碼中 hasread表示是否讀到了‘@’字元,hasread1表示是否讀到了‘+’字元 。 目前beat 99%

class Solution {
    public int numUniqueEmails(String[] emails) {
        int hasread=0;    //是否到了@符號,@後面的不用管
        int hasread1=0;
        int size=0;
        char[] ch;
        int index=0;
        int cnt = emails.length;
        for(int i=0;i<emails.length;++i){
            hasread=0;
            hasread1=0;
            index=0;
            size = emails[i].length();
            ch = new char[size];
            
           for(int j=0;j<size;++j){
               if(emails[i].charAt(j)=='@') hasread=1;
               if(emails[i].charAt(j)=='+') hasread1=1;
               if(hasread==0){
                  if(hasread1==0 && emails[i].charAt(j)!='.') ch[index++]=emails[i].charAt(j); 
                } else ch[index++]=emails[i].charAt(j);
               
           }
            
            emails[i] = new String(ch,0,index);
            //對比前面是否有相同
            for(int k=i-1;k>=0;--k){
                if(emails[k].equals(emails[i])) {cnt--;break;}
            }
        }

        return cnt;
    }
}

 

%