This repository was archived by the owner on Aug 13, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathContacts.java
82 lines (72 loc) · 2.07 KB
/
Contacts.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
71
72
73
74
75
76
77
78
79
80
81
82
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/**
* @author medany
*/
public class Contacts {
public Integer[] solve(String[] lines, int f) {
ContactsManager contacts = new ContactsManager();
String operation, contact, pattern;
Integer[] result = new Integer[f];
int r = 0;
for (String line : lines) {
operation = line.split(" ")[0];
if (operation.equals("add")) {
contact = line.split(" ")[1];
contacts.add(contact);
} else if (operation.equals("find")) {
pattern = line.split(" ")[1];
result[r] = contacts.find(pattern);
r++;
}
}
return result;
}
}
class ContactsManager {
private Map<Character, Map<Character, List<String>>> book;
public ContactsManager() {
this.book = new TreeMap<>();
}
public void add(String name) {
if (book.containsKey(name.charAt(0))) {
if (book.get(name.charAt(0)).containsKey(name.charAt(1))) {
book.get(name.charAt(0)).get(name.charAt(1)).add(name);
} else {
book.get(name.charAt(0)).put(name.charAt(1), new ArrayList<String>());
book.get(name.charAt(0)).get(name.charAt(1)).add(name);
}
} else {
book.put(name.charAt(0), new HashMap<Character, List<String>>());
if (name.length() > 1) {
book.get(name.charAt(0)).put(name.charAt(1), new ArrayList<String>());
book.get(name.charAt(0)).get(name.charAt(1)).add(name);
} else {
book.get(name.charAt(0)).put(name.charAt(0), new ArrayList<String>());
book.get(name.charAt(0)).get(name.charAt(0)).add(name);
}
}
}
public int find(String pattern) {
int count = 0;
if (pattern.length() < 2) {
if (book.containsKey(pattern.charAt(0))) {
for (List<String> list : book.get(pattern.charAt(0)).values())
count += list.size();
}
} else {
if (book.containsKey(pattern.charAt(0))) {
if (book.get(pattern.charAt(0)).containsKey(pattern.charAt(1)))
for (String contact : book.get(pattern.charAt(0)).get(pattern.charAt(1))) {
if (contact.startsWith(pattern)) {
count++;
}
}
}
}
return count;
}
}