| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | type trie struct {	word bool	next [26]*trie}func (t *trie) insert(s string) {	for _, r := range s {		i := r - 'a'		if t.next[i] == nil {			t.next[i] = &trie{}		}		t = t.next[i]	}	t.word = true}func (t *trie) search(s string) *trie {	res := t	for _, r := range s {		res = res.next[r-'a']		if res == nil {			break		}	}	return res}type MagicDictionary struct {	tree trie}/** Initialize your data structure here. */func Constructor() MagicDictionary {	return MagicDictionary{}}/** Build a dictionary through a list of words */func (this *MagicDictionary) BuildDict(dict []string) {	for _, s := range dict {		this.tree.insert(s)	}}/** Returns if there is any word in the trie that equals to the given word after modifying exactly one character */func (this *MagicDictionary) Search(word string) bool {	for i := range word {		t := this.tree.search(word[:i])		if t == nil {			continue		}		for j := 0; j < 26; j++ {			if j == int(word[i]-'a') || t.next[j] == nil {				continue			}			if s := t.next[j].search(word[i+1:]); s != nil && s.word {				return true			}		}	}	return false}/** * Your MagicDictionary object will be instantiated and called as such: * obj := Constructor(); * obj.BuildDict(dict); * param_2 := obj.Search(word); */
 |