DFS.
public class Solution {
public boolean exist(char[][] board, String word) {
if (board == null || board.length == 0) return false;
if (word == null || word.length() == 0) return true;
boolean[][] used = 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 (helper(board, used, word, 0, i, j)) return true;
}
}
return false;
}
public boolean helper(char[][] board, boolean[][] used, String word, int validNum, int i, int j){
if (validNum == word.length()) return true;
if ( board[i][j] == word.charAt(validNum) && used[i][j] == false){
validNum++;
used[i][j] = true;
boolean a = (validNum == word.length());
if (i-1 >= 0){
a |= helper(board, used, word, validNum, i-1, j);
}
if (i+1 < board.length){
a |= helper(board, used, word, validNum, i+1, j);
}
if (j-1 >= 0){
a |= helper(board, used, word, validNum, i, j-1);
}
if (j+1 < board[0].length){
a |= helper(board, used, word, validNum, i, j+1);
}
if (a == false){
validNum --;
used[i][j] = false;
}
return a;
}
return false;
}
}