class Solution {
public:
bool DFS(vector<vector<char> > &board, vector<vector<bool> > &visited, string word, int i, int j, int n) {
if (n == word.size()) return true;
if (i < 0 || i >= board.size()) return false;
if (j < 0 || j >= board[0].size()) return false;
if (visited[i][j]) return false;
if (board[i][j] != word[n]) return false;
bool found = false;
visited[i][j] = true;
found = found || DFS(board, visited, word, i - 1, j, n + 1);
found = found || DFS(board, visited, word, i + 1, j, n + 1);
found = found || DFS(board, visited, word, i, j - 1, n + 1);
found = found || DFS(board, visited, word, i, j + 1, n + 1);
visited[i][j] = false;
return found;
}
bool exist(vector<vector<char> > &board, string word) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (word.empty()) return true;
int m = board.size();
if (m == 0) return false;
int n = board[0].size();
if (n == 0) return false;
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, visited, word, i, j, 0))
return true;
return false;
}
};
Small Case: 4ms
Large Case: 324ms
Time: O(4^n)
Space: O(n^2)
Simple DFS Problem.