Skip to content

Commit 4cd68c5

Browse files
committed
Trie Data Structure implemented
1 parent be318e8 commit 4cd68c5

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package main.java.videos;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public class Tries {
7+
public static void main(String[] args) {
8+
final List<String> setOfStrings = new ArrayList<>();
9+
setOfStrings.add("pqrs");
10+
setOfStrings.add("pprt");
11+
setOfStrings.add("psst");
12+
setOfStrings.add("qqrs");
13+
setOfStrings.add("pqrs");
14+
final Trie trie = new Trie();
15+
setOfStrings.forEach(trie::insert);
16+
System.out.println(trie.query("psst"));
17+
trie.update("qqrs", "psst");
18+
System.out.println(trie.query("qqrs"));
19+
System.out.println(trie.query("psst"));
20+
}
21+
}
22+
23+
class Trie {
24+
final TrieNode root;
25+
26+
public Trie() {
27+
this.root = new TrieNode();
28+
}
29+
30+
public int query(final String s) {
31+
TrieNode current = root;
32+
for (int i = 0; i < s.length(); i++) {
33+
if (current == null) {
34+
return 0;
35+
}
36+
current = current.next(s.charAt(i));
37+
}
38+
return current.terminating;
39+
}
40+
41+
public void insert(final String s) {
42+
TrieNode current = root;
43+
for (int i = 0; i < s.length(); i++) {
44+
if (current.trieNodes[s.charAt(i) - 'a'] == null) {
45+
current.trieNodes[s.charAt(i) - 'a'] = new TrieNode();
46+
}
47+
current = current.next(s.charAt(i));
48+
}
49+
current.terminating++;
50+
}
51+
52+
public void delete(final String s) {
53+
TrieNode current = root;
54+
for (int i = 0; i < s.length(); i++) {
55+
if (current == null) {
56+
throw new RuntimeException();
57+
}
58+
current = current.next(s.charAt(i));
59+
}
60+
if (current.terminating != 0) {
61+
current.terminating--;
62+
} else {
63+
throw new RuntimeException();
64+
}
65+
}
66+
67+
public void update(final String old, final String newString) {
68+
delete(old);
69+
insert(newString);
70+
}
71+
}
72+
73+
class TrieNode {
74+
int terminating;
75+
final TrieNode[] trieNodes = new TrieNode[26];
76+
77+
public TrieNode next(final char c) {
78+
return trieNodes[c - 'a'];
79+
}
80+
}

0 commit comments

Comments
 (0)