Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.
For example,
Given board =
[ ["ABCE"], ["SFCS"], ["ADEE"] ]word =
"ABCCED",
-> returns true,word =
"SEE",
-> returns true,word =
"ABCB",
-> returns false.class Solution {
public:
bool exist(vector<vector<char> > &board, string word) {
const int m = board.size();
const int n = board[0].size();
vector<vector<bool> > visited(m, vector<bool>(n, false));
for (int i =0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (dfs(board, word, 0, visited, i, j)) {
return true;
}
}
}
return false;
}
bool dfs(vector<vector<char> > &board, string word, int index, vector<vector<bool> > &visited, int x, int y) {
if (index == word.size()) {
return true;
}
if (x < 0 || y < 0 || x >= board.size() || y >= board[0].size()) {
return false;
}
if (word[index] != board[x][y] || visited[x][y]) {
return false;
}
visited[x][y] = true;
bool res = dfs(board, word, index+1, visited, x-1, y) ||
dfs(board, word, index+1, visited, x+1, y) ||
dfs(board, word, index+1, visited, x, y-1) ||
dfs(board, word, index+1, visited, x, y+1);
visited[x][y] = false;
return res;
}
};
本文介绍了一个算法问题:在一个二维字符网格中查找指定单词是否存在。通过深度优先搜索(DFS)策略,从每个可能的位置出发,检查是否能按顺序匹配单词的所有字母,且不重复使用同一字母。文中提供了一个C++实现示例。
991

被折叠的 条评论
为什么被折叠?



