美文网首页
79_word_search 单词搜索

79_word_search 单词搜索

作者: lazy_ccccat | 来源:发表于2020-01-20 00:04 被阅读0次

题目描述

https://leetcode-cn.com/problems/word-search/

解法

class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        if (board.empty() || board[0].empty()) return false;
        int m = board.size(), n = board[0].size();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (search(board, word, 0, i, j)) return true;
            }
        }
        return false;
    }

    bool search(vector<vector<char>>& board, string word, int index, int i, int j) {
        if (word.size() == index) return true; //递归跳出:匹配到字符串结尾了,才返回true
        int m = board.size(), n = board[0].size();
        if (i < 0 || i >= m || j < 0 || j >= n || word[index] != board[i][j]) return false; //递归跳出: 中途匹配失败
        // 中途匹配成功,继续递归
        char c = board[i][j];
        board[i][j] = '#';
        bool res = search(board, word, index + 1, i, j - 1)
                || search(board, word, index + 1, i, j + 1)
                || search(board, word, index + 1, i - 1, j)
                || search(board, word, index + 1, i + 1, j);
        board[i][j] = c; //恢复现场
        return res;
        
    } 
};

思路

这道题就是典型的深度优先搜索(dfs)。
board中每个元素都可能作为深搜的起点,所以最大可能要深搜m*n次。见exist函数里的for循环。
每次的深搜,是search函数。
以board[i][j]作为起点的字符串匹配为例,说一下这个匹配(深搜)的过程:
起点:board[i][j], word[0]。
如果这俩字符相等,那么return board[i][j]上下左右4个相邻字符是否有和word[1]相等的,只要有一个相等的,那么返回true。这个过程是递归的。

  • 递归退出的条件:
    1) true: 匹配到字符串结尾了,深搜结束。
    2)false: 这俩字符不相等,或者board[i][j]越界。(上下左右递归的过程可能越界)
  • 深搜的过程中有个限制条件,每个格子只能走一次,走过的不能重复走,所以可以用visited标记数组记录当前格子是否在走过了,或者走过一个格子用'#'销毁一个格子来避免重复。注意这个格子在深搜的过程中被改变了,因此深搜完了还要恢复现场。因为最多可能深搜m*n次,不要对以别的起点的深搜造成影响。

相关文章

  • 79_word_search 单词搜索

    题目描述 https://leetcode-cn.com/problems/word-search/ 解法 思路 ...

  • 单词搜索

    给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中...

  • 单词搜索

  • 单词搜索

    题目:给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成...

  • 单词搜索

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/word...

  • leetcode212 单词搜索II

    题目 单词搜索II 暴力解法 暴力解法就是用leetcode79 单词搜索这题的搜索一个单词的dfs方法,挨个搜索...

  • python实现leetcode之79. 单词搜索

    解题思路 不断搜索单词的后缀或者单词搜索完,返回True或者无路可走,周围都被搜索过,返回False 79. 单词...

  • LeetCode-79-单词搜索(Word Search)

    LeetCode-79-单词搜索(Word Search) 79. 单词搜索[https://leetcode-c...

  • LeetCode 单词搜索

    题目描述: 解题思路:这里考虑到使用字符串,并且设计到字符的搜索,想到采用前缀树来进行存储,并根据前缀树进行搜索 ...

  • 【leetcode】单词搜索

    【leetcode】单词搜索 题目: 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺...

网友评论

      本文标题:79_word_search 单词搜索

      本文链接:https://www.haomeiwen.com/subject/mvbdzctx.html