31. Word Search II
Input: board = [["o","a","a","n"],["e","t","a","e"],["i","h","k","r"],["i","f","l","v"]], words = ["oath","pea","eat","rain"]
Output: ["eat","oath"]Input: board = [["a","b"],["c","d"]], words = ["abcb"]
Output: []Solution: (Backtracking)
class Solution
{
public:
bool dfs(vector<vector<char>> &board, int i, int j, string word, int pos)
{
int n = board.size();
int m = board[0].size();
if (pos == word.length())
{
return true;
}
if (i >= 0 && j >= 0 && i < n && j < m && word[pos] == board[i][j])
{
char temp = board[i][j];
board[i][j] = ' ';
if (dfs(board, i + 1, j, word, pos + 1))
{
board[i][j] = temp;
return true;
}
if (dfs(board, i, j + 1, word, pos + 1))
{
board[i][j] = temp;
return true;
}
if (dfs(board, i - 1, j, word, pos + 1))
{
board[i][j] = temp;
return true;
}
if (dfs(board, i, j - 1, word, pos + 1))
{
board[i][j] = temp;
return true;
}
board[i][j] = temp;
}
return false;
}
vector<string> findWords(vector<vector<char>> &board, vector<string> &words)
{
vector<string> res;
for (int k = 0; k < words.size(); k++)
{
bool flag = false;
for (int i = 0; i < board.size(); i++)
{
for (int j = 0; j < board[i].size(); j++)
{
if (words[k][0] == board[i][j])
{
if (dfs(board, i, j, words[k], 0))
{
flag = true;
res.push_back(words[k]);
break;
}
}
}
if (flag)
{
break;
}
}
}
return res;
}
};Solution: (Trie)
Last updated

