| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | type Node struct {	IsKey    bool	Children *[26]Node}type WordDictionary struct {	Root *Node}/** Initialize your data structure here. */func Constructor() WordDictionary {	return WordDictionary{&Node{}}}/** Adds a word into the data structure. */func (this *WordDictionary) AddWord(word string) {	curr := this.Root	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 data structure. A word could contain the dot character '.' to represent any one letter. */func (this *WordDictionary) Search(word string) bool {	return this.search(word, 0, this.Root)}func (this *WordDictionary) search(word string, i int, node *Node) bool {	if i == len(word) {		return node.IsKey	} else if node.Children == nil {		return false	}	if word[i] != '.' {		return this.search(word, i+1, &node.Children[int(word[i]-'a')])	}	for j := 0; j < 26; j++ {		if this.search(word, i+1, &node.Children[j]) {			return true		}	}	return false}/** * Your WordDictionary object will be instantiated and called as such: * obj := Constructor(); * obj.AddWord(word); * param_2 := obj.Search(word); */
 |