leetcode-question929

題目

每封電子郵件都由一個本地名稱和一個域名組成,以 @ 符號分隔。
例如,在 [email protected]中, alice 是本地名稱,而 leetcode.com 是域名。
除了小寫字母,這些電子郵件還可能包含 ‘,’ 或 ‘+’。
如果在電子郵件地址的本地名稱部分中的某些字符之間添加句點(’.’),則發往那裏的郵件將會轉發到本地名稱中沒有點的同一地址。例如,"[email protected]” 和 “[email protected]” 會轉發到同一電子郵件地址。 (請注意,此規則不適用於域名。)
如果在本地名稱中添加加號(’+’),則會忽略第一個加號後面的所有內容。這允許過濾某些電子郵件,例如 [email protected] 將轉發到 [email protected]。 (同樣,此規則不適用於域名。)
可以同時使用這兩個規則。
給定電子郵件列表 emails,我們會向列表中的每個地址發送一封電子郵件。實際收到郵件的不同地址有多少?

思路

按照規則將郵件地址轉換爲正常地址,然後放入set集合 最後統計set的大小即爲電子郵件個數

代碼

import java.util.Set;
import java.util.HashSet;
/**
 * 按照規則將郵件地址轉換爲正常地址,然後放入set集合 最後統計set的大小即爲電子郵件個數
 */
class Solution {
    public int numUniqueEmails(String[] emails) {
        //用於轉換後正常的電子郵件
        Set<String> uniqueEmails = new HashSet<String>();
        for(int j = 0 ; j < emails.length; ++j){
            char[] emails2char = emails[j].toCharArray();
            // @ 符號的位置
            int posAt = Integer.MAX_VALUE;
            // + 符合的位置
            int posAdd = 0;
            //用於存儲過程中轉換的正常的電子郵件
            StringBuilder sb = new StringBuilder();
            //得到 @ 的位置
            for(int i = 0; i < emails[j].length(); ++ i){
                if(emails2char[i] == '@'){
                    posAt = i;
                }
            }
            //進行郵件地址轉換
            for(int i = 0; i < emails[j].length(); ++i){
                if(emails2char[i] == '.' && i < posAt){
                    continue;
                }
                if(emails2char[i] == '+'){
                    i = posAt;
                    continue;
                }
                sb.append(emails2char[i]);
            }
            uniqueEmails.add(sb.toString());
        }
        return uniqueEmails.size();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章