Leetcode 79. Word Search

Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.
For example,
Given board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
word = "ABCCED", -> returns true,
word = "SEE", -> returns true,
word = "ABCB", -> returns false.

题意:给定一个字符类型的二维数组和一个单词,在这个数组里能不能找到这个单词,单词在这个二维矩阵里需要时一条连续的路径。

思路:虽然看起来和77、78题不一样了,但是本质上仍然是一个深度优先搜索的题目。查找的index变为了单词中指向每个字符的指针,搜索的范围变成了这个二维矩阵。遍历二维矩阵每个字符,都尝试把他当做是单词的首字母,每次搜到一个匹配的字符后,将指针指向单词下一个字符,待搜索的范围是之前字符的临接字符。

static boolean[][] visited;
public boolean exist(char[][] board, String word) {
    visited = new boolean[board.length][board[0].length];
    
    for(int i = 0; i < board.length; i++){
        for(int j = 0; j < board[i].length; j++){
            if(search(board, word, i, j, 0)){
                return true;
            }
        }
    }
    
    return false;
}

private boolean search(char[][]board, String word, int i, int j, int index){
    if(index == word.length()){
        return true;
    }
    
    if(i >= board.length || i < 0 || j >= board[i].length || j < 0 || board[i][j] != word.charAt(index) || visited[i][j]){
        return false;
    }
    
    visited[i][j] = true;
    if(search(board, word, i-1, j, index+1) || 
       search(board, word, i+1, j, index+1) ||
       search(board, word, i, j-1, index+1) || 
       search(board, word, i, j+1, index+1)){
        return true;
    }
    
    visited[i][j] = false;
    return false;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目 Given a 2D board and a word, find if the word exists i...
    persistent100阅读 1,319评论 0 0
  • 原题 给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。单词可以由按顺序的相邻单元的字母组成,其中...
    Jason_Yuan阅读 4,533评论 0 0
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,357评论 0 33
  • 文/小哲小诗 收获可以将所有的词章掩盖 在偶然间我邂逅了美丽的诗行 每天沉醉于新诗词藻之间 遇到啃过唐诗 吃过诗经...
    小哲小诗阅读 984评论 0 0
  • 正文: 静静的,由三奔四,朋友说我们—是不是都老了?我反驳说我怎么感觉不到。同时对她说,老只是一种心态,只有老了的...
    陌上花开l阅读 2,224评论 0 0

友情链接更多精彩内容