1
+ import scala .collection .mutable .HashMap
2
+
3
+ class WordDictionary () {
4
+ val trie = new Trie ()
5
+
6
+ def addWord (word : String ) {
7
+ trie.insert(word)
8
+ }
9
+
10
+ def search (word : String ): Boolean = {
11
+ trie.search(word)
12
+ }
13
+
14
+ }
15
+
16
+ class Trie () {
17
+ class TrieNode {
18
+ val children : HashMap [Char , TrieNode ] = HashMap ()
19
+ var isEndOfWord = false
20
+ }
21
+
22
+ private var root : TrieNode = new TrieNode ()
23
+
24
+ def insert (word : String ): Unit = {
25
+ var curr = root
26
+ word.foreach(c => {
27
+ if (! curr.children.contains(c)) {
28
+ curr.children(c) = new TrieNode ()
29
+ }
30
+
31
+ curr = curr.children(c)
32
+ })
33
+
34
+ curr.isEndOfWord = true
35
+ }
36
+
37
+ def search (word : String ): Boolean = {
38
+ def helper (currNode : TrieNode , currCharIndex : Int ): Boolean = {
39
+ if (currCharIndex == word.length) {
40
+ return currNode.isEndOfWord
41
+ }
42
+
43
+ val currChar = word(currCharIndex)
44
+ if (currChar == '.' ) {
45
+ var isFound = false
46
+
47
+ for ((_, childNode) <- currNode.children if ! isFound) {
48
+ isFound = helper(childNode, currCharIndex + 1 )
49
+ }
50
+
51
+ return isFound
52
+ } else {
53
+ if (currNode.children.contains(currChar)) {
54
+ return helper(currNode.children(currChar), currCharIndex + 1 )
55
+ } else {
56
+ return false
57
+ }
58
+ }
59
+ }
60
+
61
+ helper(root, 0 )
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Your WordDictionary object will be instantiated and called as such:
67
+ * var obj = new WordDictionary()
68
+ * obj.addWord(word)
69
+ * var param_2 = obj.search(word)
70
+ */
0 commit comments