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