|  | @@ -0,0 +1,65 @@
 | 
	
		
			
				|  |  | +type Node struct {
 | 
	
		
			
				|  |  | +	IsKey bool
 | 
	
		
			
				|  |  | +	Children *[26]Node
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +type Trie struct {
 | 
	
		
			
				|  |  | +	Root *Node
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/** Initialize your data structure here. */
 | 
	
		
			
				|  |  | +func Constructor() Trie {
 | 
	
		
			
				|  |  | +	return Trie{&Node{}}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/** Inserts a word into the trie. */
 | 
	
		
			
				|  |  | +func (this *Trie) Insert(word string)  {
 | 
	
		
			
				|  |  | +	curr := this.Root
 | 
	
		
			
				|  |  | +	var i int
 | 
	
		
			
				|  |  | +	for i = range word {
 | 
	
		
			
				|  |  | +		if curr.Children == nil {
 | 
	
		
			
				|  |  | +			curr.Children = &[26]Node{}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		curr = &curr.Children[int(word[i]-'a')]
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	curr.IsKey = true
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/** Returns if the word is in the trie. */
 | 
	
		
			
				|  |  | +func (this *Trie) Search(word string) bool {
 | 
	
		
			
				|  |  | +	curr := this.Root
 | 
	
		
			
				|  |  | +	var i int
 | 
	
		
			
				|  |  | +	for i = range word {
 | 
	
		
			
				|  |  | +		if curr.Children == nil {
 | 
	
		
			
				|  |  | +			return false
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		curr = &curr.Children[int(word[i]-'a')]
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return curr.IsKey
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/** Returns if there is any word in the trie that starts with the given prefix. */
 | 
	
		
			
				|  |  | +func (this *Trie) StartsWith(prefix string) bool {
 | 
	
		
			
				|  |  | +	curr := this.Root
 | 
	
		
			
				|  |  | +	for i := range prefix {
 | 
	
		
			
				|  |  | +		if curr.Children == nil {
 | 
	
		
			
				|  |  | +			return false
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		curr = &curr.Children[int(prefix[i]-'a')]
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return curr.IsKey || curr.Children != nil
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Your Trie object will be instantiated and called as such:
 | 
	
		
			
				|  |  | + * obj := Constructor();
 | 
	
		
			
				|  |  | + * obj.Insert(word);
 | 
	
		
			
				|  |  | + * param_2 := obj.Search(word);
 | 
	
		
			
				|  |  | + * param_3 := obj.StartsWith(prefix);
 | 
	
		
			
				|  |  | + */
 |