Skip to content

Commit 6c305bb

Browse files
committed
Create: 0208-implement-trie-prefix-tree.scala
1 parent 45fe669 commit 6c305bb

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import scala.collection.mutable.HashMap
2+
3+
class Trie() {
4+
class TrieNode {
5+
val children: HashMap[Char, TrieNode] = HashMap()
6+
var isEndOfWord = false
7+
}
8+
9+
private var root: TrieNode = new TrieNode()
10+
11+
def insert(word: String): Unit = {
12+
var curr = root
13+
word.foreach(c => {
14+
if (!curr.children.contains(c)) {
15+
curr.children(c) = new TrieNode()
16+
}
17+
18+
curr = curr.children(c)
19+
})
20+
21+
curr.isEndOfWord = true
22+
}
23+
24+
def search(word: String): Boolean = {
25+
traverse(word) match {
26+
case Some(endNode) => endNode.isEndOfWord
27+
case None => false
28+
}
29+
}
30+
31+
def startsWith(prefix: String): Boolean = {
32+
traverse(prefix).isDefined
33+
}
34+
35+
private def traverse(word: String): Option[TrieNode] = {
36+
var curr = root
37+
for (c <- word) {
38+
if (!curr.children.contains(c)) {
39+
return None
40+
} else {
41+
curr = curr.children(c)
42+
}
43+
}
44+
45+
return Some(curr)
46+
}
47+
}
48+
49+
/**
50+
* Your Trie object will be instantiated and called as such:
51+
* var obj = new Trie()
52+
* obj.insert(word)
53+
* var param_2 = obj.search(word)
54+
* var param_3 = obj.startsWith(prefix)
55+
*/

0 commit comments

Comments
 (0)