LeetCode0929.獨特的電子郵件地址
阿新 • • 發佈:2018-11-20
0929.獨特的電子郵件地址
描述
每封電子郵件都由一個本地名稱和一個域名組成,以 @ 符號分隔。
例如,在 [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]
都包含有且僅有一個'@'
字元。
題解
- 新建
HashMap
用於儲存每一個域名和域名下的地址 - 對每一個地址的本地名稱都轉化為標準格式
- 利用
HashSet
儲存每一個域名下的地址
class Solution {
public static int numUniqueEmails(String[] emails) {
HashMap<String, HashSet<String>> comMap = new HashMap<>();
HashSet<String> addSet;
String first;
String last;
for(String adress:emails){
int index = adress.indexOf('@');
first = adress.substring(0,index);
first = getRightAddress(first);
last = adress.substring(index+1,adress.length());
if (comMap.containsKey(last)){
addSet = comMap.get(last);
addSet.add(first);
} else {
addSet = new HashSet<>();
addSet.add(first);
comMap.put(last,addSet);
}
}
int counter = 0;
for(HashSet<String> nowSet:comMap.values()){
counter += nowSet.size();
}
return counter;
}
public static String getRightAddress(String address){
char[] nowAddress = new char[address.length()];
int index = 0;
for (int i = 0; i < address.length(); i++) {
char nowChar = address.charAt(i);
if (nowChar == '.')
continue;
if (nowChar == '+'){
index++;
break;
}
else {
nowAddress[index] = nowChar;
index++;
}
}
String result = (new String(nowAddress)).substring(0,index-1);
return result;
}
}