美文网首页
单词搜索

单词搜索

作者: 杰米 | 来源:发表于2016-09-13 16:32 被阅读17次
给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。

单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。

样例
给出board =

[

  "ABCE",

  "SFCS",

  "ADEE"

]

word = "ABCCED", ->返回 true,

word = "SEE",-> 返回 true,

word = "ABCB", -> 返回 false.
class Solution {
public:
    /**
     * @param board: A list of lists of character
     * @param word: A string
     * @return: A boolean
     */
    bool exist(vector<vector<char> > &board, string word) {
        // write your code here
        int boardH = board.size();
        if (boardH == 0) {
            return false;
        }
        
        int boardW = board[0].size();
        if (boardW == 0) {
            return false;
        }
        
        int wordWidth = word.size();
        
        vector<vector<bool> > visited(boardH,vector<bool>(boardW,false));
        
        for (int i = 0;i < boardH;i++) {
            for (int j = 0;j < boardW;j++) {
                if (board[i][j] == word[0]) {
                    if(dfs(board,visited,i,j,boardH,boardW,word,0,wordWidth)) {
                        return true;
                    }
                }
            }
        }
        
        return false;
    }
    
    bool dfs(vector<vector<char> > &board,vector<vector<bool> > &visited,int i,int j,int boardH,int boardW,string &word,int wordIndex,int wordWith) {
        
        
        
        if (j >= 0 && i >= 0 && i < boardH && j < boardW && visited[i][j] == false && wordIndex < wordWith && board[i][j] == word[wordIndex]) {
            
            
            if (wordIndex == wordWith-1) {
                return true;
            }
            visited[i][j] = true;
            if(dfs(board,visited,i-1,j,boardH,boardW,word,wordIndex+1,wordWith)) {
                return true;
            }
            
            if(dfs(board,visited,i+1,j,boardH,boardW,word,wordIndex+1,wordWith)) {
                return true;
            }
            
            if(dfs(board,visited,i,j-1,boardH,boardW,word,wordIndex+1,wordWith)) {
                return true;
            }
            
            if(dfs(board,visited,i,j+1,boardH,boardW,word,wordIndex+1,wordWith)) {
                return true;
            }
            visited[i][j] = false;
        }
        
        return false;
    }
};

相关文章

  • 单词搜索

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

  • 单词搜索

  • 单词搜索

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

  • 单词搜索

    题目来源:力扣(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】单词搜索 题目: 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺...

  • 力扣 211 添加与搜索单词 - 数据结构设计

    题意:添加与搜索单词 思路: 在添加单词的适合,构建TrieNode 在搜索的时候,分成.和char不同情况,递归...

网友评论

      本文标题:单词搜索

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