代码之家  ›  专栏  ›  技术社区  ›  user2411290

2D单词搜索实现:获取索引超出范围异常(Java)

  •  0
  • user2411290  · 技术社区  · 6 年前

    我正在尝试为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;
    }
    }
    
    0 回复  |  直到 6 年前