2023年11月19日
[Leetcode] 单词搜索
给定一个
m x n二维字符网格board和一个字符串单词word。如果word存在于网格中,返回true;否则,返回false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例 1:
**输入:**board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED” **输出:**true
示例 2:
**输入:**board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “SEE” **输出:**true
示例 3:
**输入:**board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCB” **输出:**false
提示:
m == board.length
n = board[i].length
1 <= m, n <= 6
1 <= word.length <= 15
board和word仅由大小写英文字母组成
class Solution {private: // A // A // A // AS // AB // bool dfs(vector<vector<char>>& board, int m, int n, int index, const string &word) { if (m < 0 || n < 0 || m > board.size() - 1 || n > board[0].size()-1 || word[index] != board[m][n]) return false;
if (index + 1 == word.size()) { return true; } // std::cout << m << "," << n << std::endl; // std::cout << cur_res << std::endl; // std::cout << board[m][n] << std::endl; board[m][n] = '\0'; if (dfs(board, m - 1, n, index + 1, word)|| dfs(board, m, n - 1, index + 1, word)|| dfs(board, m + 1, n, index + 1, word)|| dfs(board, m, n + 1, index + 1, word)) return true; board[m][n] = word[index]; return false; }public: bool exist(vector<vector<char>>& board, string word) { for (auto i = 0; i < board.size(); ++i) { for (auto j = 0 ; j < board[0].size(); ++j) { if(dfs(board, i, j, 0, word)) return true; } } return false; }};

