| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | 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) string {	var sb strings.Builder	for _, r := range s {		t = t.next[r-'a']		if t == nil {			return ""		}		sb.WriteRune(r)		if t.word {			break		}	}	return sb.String()}func replaceWords(dict []string, sentence string) string {	var t trie	for i := range dict {		t.insert(dict[i])	}	words := strings.Split(sentence, " ")	for i := range words {		if root := t.search(words[i]); root != "" {			words[i] = root		}	}	return strings.Join(words, " ")}
 |