我正在尝试为2D单词搜索想出一个dfsjava解决方案-我正在检查2dchar数组,看看是否存在一个单词(允许垂直和水平移动)。当我对递归函数“findLetters”进行边界检查时,我得到了一个“index out out bounds”异常。我不确定为什么我不确定。
测试用例:
char [][] board =
{
{'A','B','C','E'},
{'S','F','C','S'},
{'A','D','E','E'}
};
给定word=“ABCCED”,返回true。给定单词=“SEE”,返回true。
给定word=“ABCB”,返回false。
错误消息/堆栈跟踪:
运行时错误消息:线程“main”中出现异常
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:
解决方案.findLetters(解决方案.java:20)在
解决方案。存在(解决方案.java:10)在
.
帮手
(
司机
.爪哇语:8)在
司机
司机
.爪哇: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;
}
}