DFS +  Backtracking Solution without extra space (visited map)
\nfunc exist(board [][]byte, word string) bool {\n\tfor i := 0; i < len(board); i++ {\n\t\tfor j := 0; j < len(board[0]); j++ {\n\t\t\tif board[i][j] == word[0]
```\nfunc exist(board [][]byte, word string) bool {\n\tfor i := 0; i < len(board); i++ {\n\t\tfor j := 0; j < len(board[0]); j++ {\n\t\t\tif board[i][j] == word[0] {\n\t\t\t\trs := dfs(board, i, j, 0, word)\n\n\t\t\t\tif rs {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc dfs(board [][]byte, i, j, pos int, word string) bool {\n\tif i < 0 || j < 0 || i >= len(board) || j >= len(board[0]) || board[i][j] == \'*\' {\n\t\treturn false\n\t}\n\n\tif word[pos] != board[i][j] {\n\t\treturn false\n\t}\n  \n\tif len(word)-1 == pos {\n\t\treturn true\n\t}\n\n\tpos++\n    tmp := board[i][j]\n\tboard[i][j] = \'*\'\n\n\tdfsResult :=\n\t\tdfs(board, i-1, j, pos, word) ||\n\t\t\tdfs(board, i+1, j, pos, word) ||\n\t\t\tdfs(board, i, j+1, pos, word) ||\n\t\t\tdfs(board, i, j-1, pos, word)\n    board[i][j] = tmp\n  \n\treturn dfsResult\n```\n
['Backtracking', 'Depth-First Search', 'Go']