题目:
题解:
type Trie struct {children map[byte]*Trieword string
}func (t *Trie) Insert(word string) {node := tfor i := range word {ch := word[i]if node.children[ch] == nil {node.children[ch] = &Trie{children: map[byte]*Trie{}}}node = node.children[ch]}node.word = word
}var dirs = []struct{ x, y int }{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}func findWords(board [][]byte, words []string) (ans []string) {t := &Trie{children: map[byte]*Trie{}}for _, word := range words {t.Insert(word)}m, n := len(board), len(board[0])var dfs func(node *Trie, x, y int)dfs = func(node *Trie, x, y int) {ch := board[x][y]nxt := node.children[ch]if nxt == nil {return}if nxt.word != "" {ans = append(ans, nxt.word)nxt.word = ""}if len(nxt.children) > 0 {board[x][y] = '#'for _, d := range dirs {nx, ny := x+d.x, y+d.yif 0 <= nx && nx < m && 0 <= ny && ny < n && board[nx][ny] != '#' {dfs(nxt, nx, ny)}}board[x][y] = ch}if len(nxt.children) == 0 {delete(node.children, ch)}}for i, row := range board {for j := range row {dfs(t, i, j)}}return
}