Word Search
Given a 2D board and a word, find if the word exists in the grid.
- Time: O(N)
- Space: O(1)
public boolean exist(char[][] board, String word) {
if (board == null || board.length == 0
|| board[0].length == 0 || word == null) return false;
char[] target = word.toCharArray();
boolean[][] visited = new boolean[board.length][board[0].length];
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (board[i][j] == target[0]) {
if (dfs(board, target, 0, i, j, visited)) return true;
}
}
}
return false;
}
public boolean dfs(char[][] board, char[] target,
int start, int i, int j, boolean[][] visited) {
if (board[i][j] == target[start]) {
visited[i][j] = true;
if (start == target.length - 1) return true;
if (i - 1 >= 0 && !visited[i - 1][j]) {
if (dfs(board, target, start + 1, i - 1, j, visited))
return true;
}
if (i + 1 < board.length && !visited[i + 1][j]) {
if (dfs(board, target, start + 1, i + 1, j, visited))
return true;
}
if (j - 1 >= 0 && !visited[i][j - 1]) {
if (dfs(board, target, start + 1, i, j - 1, visited))
return true;
}
if (j + 1 < board[0].length && !visited[i][j + 1]) {
if (dfs(board, target, start + 1, i, j + 1, visited))
return true;
}
}
visited[i][j] = false;
return false;
}