-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path208_implement_trie.rb
More file actions
63 lines (57 loc) · 1.41 KB
/
208_implement_trie.rb
File metadata and controls
63 lines (57 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class TrieNode
# Initialize your data structure here.
attr_accessor :is_word, :leaves
def initialize
@is_word = false
@leaves = []
end
end
class Trie
def initialize
@root = TrieNode.new
end
# @param {string} word
# @return {void}
# Inserts a word into the trie.
def insert(word)
node = @root;
word.each_byte do |s|
index = s - 97
unless node.leaves[index]
node.leaves[index] = TrieNode.new
end
node = node.leaves[index]
end
node.is_word = true
end
# @param {string} word
# @return {boolean}
# Returns if the word is in the trie.
def search(word)
node = search_node_with(word)
return node ? node.is_word : false
end
# @param {string} prefix
# @return {boolean}
# Returns if there is any word in the trie
# that starts with the given prefix.
def starts_with(prefix)
return !!search_node_with(prefix)
end
def search_node_with(string)
node = @root;
string.each_byte do |s|
index = s - 97
if !node.leaves[index]
return nil
end
node = node.leaves[index]
end
return node
end
end
# Your Trie object will be instantiated and called as such:
trie = Trie.new
trie.insert('abcc')
trie.insert("somestring")
trie.search("key")