美文网首页
Leetcode79单词搜索

Leetcode79单词搜索

作者: answerLDA | 来源:发表于2019-11-04 16:54 被阅读0次

题目

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:
board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

分析

步骤一,先遍历寻找到开始的位置,就是一个普通的双层遍历即可;
步骤二,从开头位置开始,进行递归遍历搜索。
如下图,想要寻找单词“FCSEE”,首先在步骤一中找到F字母在(1,1)位置;
先寻找上边,上边找不到就找左边,左边找不到就找下边,下边找不到就找右边;如果四边都找不到,就返回false,继续寻找。
需要把每个寻找到的字符进行替换成‘0’,防止重复使用了某个字符;四边都寻找过后,把字符替换回来;
下图展示了寻找的过程,如果匹配,则字符变成黑色并替换成0;如果匹配不通过,则字符变成红色。


image.png

代码

class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        int n = board.size(),m = board[0].size();
        //找到开头的节点
        for(int i=0;i<n;i++){
            for(int j = 0;j<m;j++){
                if(board[i][j] == word[0])
                    //如果找到了,就立即返回
                    if(search(board,word,i,j))
                        return true;
            }
        }
        return false;
    }
    
    bool search(vector<vector<char>>& board,string word,int x,int y){
        //如果word的长度为1,证明不需要往下找了,返回True
        if(word.size() == 1)
            return true;
        char a = board[x][y];
        //把已经使用过的数组替换掉
        board[x][y] = '0';
        bool res = false;
        //先找上面,然后左边,然后下面,然后右边
        if(x>0 && board[x-1][y]==word[1])
            res = search(board,word.substr(1),x-1,y);
        if(!res && y>0 && board[x][y-1]==word[1])
            res = search(board,word.substr(1),x,y-1);
        if(!res && x+1<board.size() && board[x+1][y]==word[1])
            res = search(board,word.substr(1),x+1,y);
        if(!res && y+1<board[0].size() && board[x][y+1]==word[1])
            res = search(board,word.substr(1),x,y+1);
        //找完之后数组要替换回来
        board[x][y] = a;
        //返回最后一次寻找的结果
        return res;
    }
};

相关文章

  • leetcode212 单词搜索II

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

  • Leetcode79单词搜索

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

  • leetcode79 单词搜索

    题目 单词搜索 分析 解法:dfs没啥可讲的,dfs初级练习题目(当然bfs也没问题)。 代码

  • 单词搜索

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

  • 单词搜索

  • 单词搜索

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

  • 单词搜索

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

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

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

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

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

  • LeetCode 单词搜索

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

网友评论

      本文标题:Leetcode79单词搜索

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