Repository navigation
Expand file tree
/
Copy pathCompoundWords.java
More file actions
80 lines (68 loc) · 1.7 KB
/
Copy pathCompoundWords.java
File metadata and controls
80 lines (68 loc) · 1.7 KB
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
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
public class CompoundWords {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String cur = null;
ArrayList<String> prefices = new ArrayList<String>();
ArrayList<String> keys = new ArrayList<String>();
HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
while (in.hasNextLine()) {
cur = in.nextLine();
if (cur.isEmpty())
break;
if (map.get(cur) == null) {
map.put(cur, new ArrayList<String>());
}
map.get(cur).add("!!!!");
if (prefices.isEmpty()) {
prefices = new ArrayList<String>();
}
// find possible prefixes
keys = new ArrayList<String>();
for (String s : prefices) {
if (cur.startsWith(s)) {
keys.add(s);
}
}
if (!keys.isEmpty()) {
for (String key : keys) {
String w2 = cur.substring(key.length(), cur.length());
ArrayList<String> l = map.get(w2);
if (l == null) {
map.put(w2, new ArrayList<String>());
l = map.get(w2);
}
l.add(cur);
}
}
prefices.add(cur);
}
ArrayList<String> l = new ArrayList<String>();
process(map, l);
HashSet<String> hs = new HashSet<String>();
hs.addAll(l);
l.clear();
l.addAll(hs);
Collections.sort(l);
for (String w : l) {
System.out.println(w);
}
}
public static void process(HashMap<String, ArrayList<String>> map,
ArrayList<String> l) {
for (String k : map.keySet()) {
ArrayList<String> ws = map.get(k);
if (ws.contains("!!!!")) {
for (String s : ws) {
if (!s.equals("!!!!")) {
l.add(s);
}
}
}
}
}
}