单词搜索
in Algorithm Pageviews
给定一个 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
代码实现如下:
class Solution {
public:
bool exist(vector<vector<char>>& board, string word) {
if (board.empty() || board[0].empty()) {
return false;
}
int r = board.size();
int c = board[0].size();
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if (dfs(board, i, j, word, 0)) {
return true;
}
}
}
return false;
}
vector<int> dir{-1, 0, 1, 0, -1};
bool dfs(vector<vector<char>> &board, int x, int y, string &word, int u)
{
if (board[x][y] != word[u]) {
return false;
}
if (u == word.size() - 1) {
return true;
}
int n = board.size();
int m = board[0].size();
board[x][y] = '.';
for (int i = 0; i < 4; i++) {
auto x_ = x + dir[i];
auto y_ = y + dir[i + 1];
if (x_ < 0 || x_ >= n || y_ < 0 || y_ >= m) {
continue;
}
if (dfs(board, x_, y_, word, u + 1)) {
return true;
}
}
board[x][y] = word[u];
return false;
}
};