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) {
int m = board.size(), 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, i, j, word, 0, visited))
return true;
}
return false;
}
bool dfs(vector<vector<char>> &board, int x, int y, string &word, int index, vector<vector<bool>> &visited)
{
if(index == word.size()) return true;
if(x < 0 || y < 0 || x >= board.size() || y >= board[0].size())
return false;
if(visited[x][y]) return false;
if(board[x][y] != word[index]) return false;
visited[x][y] = true;
bool res = dfs(board, x+1, y, word, index+1, visited) || dfs(board, x, y+1, word, index+1, visited) || dfs(board, x-1, y, word, index+1, visited) || dfs(board, x, y-1, word, index+1, visited);
visited[x][y] = false;
return res;
}
};

本文介绍了一种在二维网格中查找指定单词的算法。通过深度优先搜索(DFS),算法可以确定给定单词是否可以通过相邻的网格单元形成,且不重复使用同一单元。示例包括在网格中查找特定单词,并提供了实现代码。
967

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



