使用c sharp代码解决如下问题 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。 示例 1: 输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED" 输出:true 示例 2: 输入:board = [["a","b"],["c","d"]], word = "abcd" 输出:false 提示: m == board.length n = board[i].length 1 <= m, n <= 6 1 <= word.length <= 15 board 和 word 仅由大小写英文字母组成
时间: 2023-06-03 22:06:08 浏览: 190
这是一个算法问题,可以使用深度优先搜索(DFS)来解决。具体操作是从每一个字符开始,分别以它们为起点进行 DFS 搜索,如果搜索到的字符串和目标字符串匹配,则返回 true,否则返回 false。代码如下:
```
public class Solution {
private int[][] direction = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; // 方向数组
public bool Exist(char[][] board, string word) {
int m = board.Length, n = board[0].Length;
bool[][] visited = new bool[m][];
for (int i = 0; i < m; i++) {
visited[i] = new bool[n]; // 初始化 visited 数组
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (board[i][j] == word[0] && DFS(board, visited, word, i, j, 0)) {
return true; // 找到目标字符串
}
}
}
return false; // 没有找到目标字符串
}
private bool DFS(char[][] board, bool[][] visited, string word, int r, int c, int index) {
if (index == word.Length - 1) { // 遍历到目标字符串的最后一个字符,说明找到了
return true;
}
visited[r][c] = true; // 标记当前位置为已访问
for (int i = 0; i < 4; i++) { // 搜索相邻字符
int newRow = r + direction[i][0];
int newCol = c + direction[i][1];
if (newRow < 0 || newRow >= board.Length || newCol < 0 || newCol >= board[0].Length
|| board[newRow][newCol] != word[index + 1] || visited[newRow][newCol]) {
continue; // 判断越界,字符是否匹配,是否已访问
}
if (DFS(board, visited, word, newRow, newCol, index + 1)) {
return true; // 找到目标字符串,返回 true
}
}
visited[r][c] = false; // 回溯,标记当前位置为未访问
return false;
}
}
```
阅读全文