• 代码题(47)— 单词搜索


    1、79. 单词搜索

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

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

    示例:

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

      这道题是典型的深度优先遍历DFS的应用,原二维数组就像是一个迷宫,可以上下左右四个方向行走,我们以二维数组中每一个数都作为起点和给定字符串做匹配,我们还需要一个和原数组等大小的visited数组,是bool型的,用来记录当前位置是否已经被访问过,因为题目要求一个cell只能被访问一次。如果二维数组board的当前字符和目标字符串word对应的字符相等,则对其上下左右四个邻字符分别调用DFS的递归函数,只要有一个返回true,那么就表示可以找到对应的字符串,否则就不能找到。

    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();
            vector<vector<int>> visited(m,vector<int>(n,0));
            for(int i=0;i<m;++i)
            {
                for(int j=0;j<n;++j)
                {
                    if(search(board,word,0,i,j,visited))
                        return true;
                }
            }  
            return false;
        }
        bool search(vector<vector<char>>& board, string word, int pos, int i, int j, vector<vector<int>> &visited)
        {
            if(pos == word.size())
                return true;
            int m = board.size(), n = board[0].size();
            if (i < 0 || j < 0 || i >= m || j >= n || visited[i][j]==1 || board[i][j] != word[pos])
                return false;
            visited[i][j] = 1;
            bool res = search(board, word, pos + 1, i - 1, j, visited) 
                     || search(board, word, pos + 1, i + 1, j, visited)
                     || search(board, word, pos + 1, i, j - 1, visited)
                     || search(board, word, pos + 1, i, j + 1, visited);
            visited[i][j] = 0;
            return res;
        }
    };
  • 相关阅读:
    Codeforces Gym100502H:Clock Pictures(KMP算法)
    SPOJ MINSUB
    POJ 2796:Feel Good(单调栈)
    搭建(WSTMart)php电商环境时缺少fileinfo函数
    TP微信扫码支付
    tp3.2 支付宝app支付
    tp3.2 支付宝手机网站支付
    Thinkphp3.2+PHPQRCode 二维码生成示例
    百度UEditor粘贴或插入的表格不显示边框的解决办法
    PHP:导出数据到word(包含图片)
  • 原文地址:https://www.cnblogs.com/eilearn/p/9492604.html
Copyright © 2020-2023  润新知