public static boolean exist(char[][] board, String word) {

    if (word.isEmpty()) {
      return true;
    }

    // default all false
    boolean[][] boardStatus = new boolean[board.length][board[0].length];

    // start with first char in the word
    char first = word.charAt(0);

    for (int i = 0 ; i < board.length ; i++) {
      for (int j = 0 ; j < board[0].length ; j++) {
        if (first == board[i][j]) {
          boardStatus[i][j] = true; // set status to true
          if (helper(board, word.substring(1), boardStatus, i, j)) {
            return true;
          }
          boardStatus[i][j] = false;
        }
      }
    }

    return false;
  }