Я пытаюсь найти решение DFS Java для поиска 2D-слов - я проверяю массив двумерных символов, чтобы увидеть, существует ли слово (разрешено ли перемещаться вертикально и горизонтально).Когда я выполняю проверку границ для моей рекурсивной функции findLetters, я получаю исключение «индекс вне границ».Я полагаю, что правильно установил проверку границ, поэтому не уверен, почему она выходит за пределы диапазона.
Любые идеи приветствуются!
Контрольный пример:
char [][] board =
{
{'A','B','C','E'},
{'S','F','C','S'},
{'A','D','E','E'}
};
Дано слово = "ABCCED", вернуть true.Дано слово = "СМОТРЕТЬ", вернуть true.Заданное слово = "ABCB", вернуть false.
Сообщение об ошибке / трассировка стека:
Сообщение об ошибке во время выполнения: Исключение в потоке "main"java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: 1 в java.lang.String.charAt (String.java:615) в Solution.findLetters (Solution.java:20) в Solution.exist (Solution.java:10)в DriverSolution . помощник ( Драйвер .java: 8) в Драйвер .main ( Драйвер .java:54) Последний выполненный ввод: [["a"]] "a"
Решение:
public boolean exist(char[][] board, String word) {
int row = board.length, column = board[0].length;
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
if (board[i][j] == word.charAt(0)) {
if (findLetters(board, i, j, word, 1)) return true;
}
}
}
return false;
}
public boolean findLetters(char[][] board, int i, int j, String word, int index) {
if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || word.charAt(index) != board[i][j]) {
return false;
}
if (index == word.length()) return true;
else if (
findLetters(board, i + 1, j, word, index++) ||
findLetters(board, i - 1, j, word, index++) ||
findLetters(board, i, j + 1, word, index++) ||
findLetters(board, i, j - 1, word, index++)
) {
return true;
}
return false;
}
}