-
-
Notifications
You must be signed in to change notification settings - Fork 299
/
929.java
70 lines (66 loc) · 2.1 KB
/
929.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
__________________________________________________________________________________________________
sample 3 ms submission
class Solution {
public int numUniqueEmails(String[] emails) {
Set<String> set = new HashSet<String>();
for(String e: emails) {
set.add(normalize(e));
}
return set.size();
}
String normalize(String email) {
char[] str = email.toCharArray();
int len = 0;
boolean localname = true;
boolean ignore = false;
for(char c: str) {
if (c == '@') localname = false;
if (localname) {
if (ignore || c == '.') continue;
if (c == '+') {
ignore = true;
continue;
}
}
str[len++] = c;
}
//System.out.println(new String(str, 0, len));
return new String(str, 0, len);
}
}
__________________________________________________________________________________________________
sample 36136 kb submission
class Solution {
public int numUniqueEmails(String[] emails) {
int len = emails.length;
if(len<1) return 0;
HashMap<String, Set<String>> map = new HashMap<>();
for(String s : emails){
// s empty
if(s.length()<1) continue;
String[] ss = s.split("@");
String front = ss[0];
String domain = ss[1];
//'+'
String[] removepluss = front.split("\\+");
String prefix = removepluss[0];
//'.'
String[] removedot = prefix.split("\\.");
StringBuilder cur = new StringBuilder();
for(String i : removedot){
cur.append(i);
}
String pre = cur.toString();
if(map.containsKey(pre)){
map.get(pre).add(domain);
}
else map.computeIfAbsent(pre,func->new HashSet<String>()).add(domain);
}
int count =0;
for(String key : map.keySet()){
count+=map.get(key).size();
}
return count;
}
}
__________________________________________________________________________________________________