class Solution {
boolean[][] used;
public boolean exist(char[][] board, String word) {
used = new boolean[board.length][board[0].length];
for(int i = 0; i < board.length; i++) {
for(int j = 0; j < board[i].length; j++) {
if (board[i][j] == word.charAt(0))
if(DFS(board, word, i, j, 0))
return true;
else
continue;
}
}
return false;
}
public boolean DFS(char[][] board, String word, int i, int j, int index) {
if (i < 0 || j < 0 || i >= board.length || j >= board[i].length || word.charAt(index) != board[i][j] || used[i][j]) {
return false;
}
else if (index == word.length() - 1) {
return true;
} else {
used[i][j] = true;
if(DFS(board, word, i, j+1, index+1) || DFS(board, word, i+1, j, index+1) || DFS(board, word, i, j-1, index+1) || DFS(board, word, i-1, j, index+1)) {
return true;
} else {
used[i][j] = false;
return false;
}
}
}
}