0079. Word Search
Last updated
Last updated
**Input:** board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
**Output:** true**Input:** board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
**Output:** true**Input:** board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
**Output:** falseclass Solution {
int[][] dirs = new int[][]{{0,1},{0,-1},{1,0},{-1,0}};
public boolean exist(char[][] board, String word) {
// edge cases
if (board == null || board.length == 0 || board[0].length == 0 || word.length() == 0) {
return false;
}
for (int r = 0; r < board.length; r++) {
for (int c = 0; c < board[0].length; c++) {
if (backtrack(board, r, c, 0, word)) return true;
}
}
return false;
}
private boolean backtrack(char[][] board, int r, int c, int kth, String word) {
// exit
if (r < 0 || r >= board.length || c < 0 || c >= board[0].length || board[r][c] != word.charAt(kth))
return false;
if (kth == word.length()-1) return true;
char old = board[r][c];
board[r][c] = '*';
for (int[] d : dirs) {
int r2 = r + d[0];
int c2 = c + d[1];
if (backtrack(board, r2, c2, kth+1, word)) return true; // find one true, return, no need to proceed
}
board[r][c] = old;
return false;
}
}