import
java.util.*;
public
class
Main
{
static
int
CHILDREN =
26
;
static
class
trie {
public
boolean
endOfWord;
public
trie[] child;
public
trie()
{
endOfWord =
false
;
child =
new
trie[CHILDREN];
}
}
static
trie createNode()
{
trie temp =
new
trie();
temp.endOfWord =
false
;
for
(
int
i =
0
; i < CHILDREN; i++)
{
temp.child[i] =
null
;
}
return
temp;
}
static
void
insertRecursively(trie itr, String str,
int
i)
{
if
(i < str.length()) {
int
index = str.charAt(i) -
'a'
;
if
(itr.child[index] ==
null
)
{
itr.child[index] = createNode();
}
insertRecursively(itr.child[index], str, i +
1
);
}
else
{
itr.endOfWord =
true
;
}
}
static
void
insert(trie itr, String str)
{
insertRecursively(itr, str,
0
);
}
static
boolean
searchRecursively(trie itr,
char
[] str,
int
i,
int
len)
{
if
(itr ==
null
)
return
false
;
if
(itr.endOfWord ==
true
&& i == len -
1
)
{
return
true
;
}
int
index = str[i] -
'a'
;
return
searchRecursively(itr.child[index], str, i +
1
, len);
}
static
void
search(trie root, String str)
{
char
[] arr =
new
char
[str.length() +
1
];
for
(
int
i =
0
; i < str.length(); i++)
{
arr[i] = str.charAt(i);
}
if
(searchRecursively(root, arr,
0
, str.length() +
1
))
System.out.println(
"found"
);
else
{
System.out.println(
"not found"
);
}
}
public
static
void
main(String[] args) {
trie root = createNode();
insert(root,
"their"
);
insert(root,
"there"
);
insert(root,
"answer"
);
insert(root,
"any"
);
search(root,
"anywhere"
);
search(root,
"answer"
);
}
}