# 单词搜索

<p>给定一个 <code>m x n</code> 二维字符网格 <code>board</code> 和一个字符串单词 <code>word</code> 。如果 <code>word</code> 存在于网格中，返回 <code>true</code> ；否则，返回 <code>false</code> 。</p><p>单词必须按照字母顺序，通过相邻的单元格内的字母构成，其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。</p><p> </p><p><strong>示例 1：</strong></p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0079.Word%20Search/images/word2.jpg" style="width: 322px; height: 242px;" /><pre><strong>输入：</strong>board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"<strong><br />输出：</strong>true</pre><p><strong>示例 2：</strong></p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0079.Word%20Search/images/word-1.jpg" style="width: 322px; height: 242px;" /><pre><strong>输入：</strong>board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"<strong><br />输出：</strong>true</pre><p><strong>示例 3：</strong></p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0079.Word%20Search/images/word3.jpg" style="width: 322px; height: 242px;" /><pre><strong>输入：</strong>board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"<strong><br />输出：</strong>false</pre><p> </p><p><strong>提示：</strong></p><ul>	<li><code>m == board.length</code></li>	<li><code>n = board[i].length</code></li>	<li><code>1 <= m, n <= 6</code></li>	<li><code>1 <= word.length <= 15</code></li>	<li><code>board</code> 和 <code>word</code> 仅由大小写英文字母组成</li></ul><p> </p><p><strong>进阶：</strong>你可以使用搜索剪枝的技术来优化解决方案，使其在 <code>board</code> 更大的情况下可以更快解决问题？</p>

## template

```python
class Solution(object):
	def exist(self, board, word):
		"""
		:type board: List[List[str]]
		:type word: str
		:rtype: bool
		"""
		check_board = [[True] * len(board[0]) for _ in range(len(board))]
		for i in range(len(board)):
			for j in range(len(board[0])):
				if board[i][j] == word[0] and check_board:
					check_board[i][j] = False
					res = self.check_exist(check_board, board, word, 1, len(word), i, j)
					if res:
						return True
					check_board[i][j] = True
		return False
	def check_exist(self, check_board, board, word, index, ls, row, col):
		if index == ls:
			return True
		for temp in [(0, 1),(0, -1),(1, 0),(-1, 0)]:
			curr_row = row + temp[0]
			curr_col = col + temp[1]
			if curr_row >= 0 and curr_row < len(board) and curr_col >= 0 and curr_col < len(board[0]):
				if check_board[curr_row][curr_col] and board[curr_row][curr_col] == word[index]:
					check_board[curr_row][curr_col] = False
					res = self.check_exist(check_board, board, word, index + 1, len(word), curr_row, curr_col)
					if res:
						return res
					check_board[curr_row][curr_col] = True
		return False
if __name__ == "__main__":
	s = Solution()
	print (s.exist(board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"))
```

## 答案

```python

```

## 选项

### A

```python

```

### B

```python

```

### C

```python

```