• Word Search


    -----QUESTION-----

    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 =

     [ ["ABCE"], ["SFCS"], ["ADEE"] ]
    word "ABCCED", -> returns true,
    word "SEE", -> returns true,
    word "ABCB", -> returns false.

    -----SOLUTION-----

    class Solution {
    public:
        bool exist(vector<vector<char> > &board, string word) {
            if(board.empty()) return false;
            vector<vector<bool>> visited(board.size(), vector<bool>(board[0].size(), false));
            bool result = false;
            for(int i = 0; i < board.size(); i++)
            {
                for(int j = 0; j < board[0].size(); j++)
                {
                     result = dfs(board,word,i,j,0,visited);
                     if(result) return true;
                     visited[i][j] = false;
                }
            }
            return false;
        }
        bool dfs(vector<vector<char> > &board, string word, int i, int j, int depth, vector<vector<bool>> &visited)
        {
            if(board[i][j] != word[depth]) return false;
            if(depth == word.length()-1) return true;
            visited[i][j] = true;
            if(j < board[0].size()-1 && !visited[i][j+1]){
                if(dfs(board,word, i, j+1, depth+1,visited)) return true;
                else visited[i][j+1] = false;
            }
            if(j > 0 && !visited[i][j-1])
            {
                if(dfs(board,word, i, j-1, depth+1,visited)) return true;
                else visited[i][j-1] = false;
            }
            if(i < board.size()-1 && !visited[i+1][j]) 
            {
                if(dfs(board,word, i+1, j, depth+1,visited)) return true;
                else visited[i+1][j] = false;
            }
            if(i > 0  && !visited[i-1][j]) 
            {
                if(dfs(board, word, i-1, j, depth+1,visited)) return true;
                else visited[i-1][j] = false;
            }
            return false;
        }
    };


  • 相关阅读:
    day23 GUI
    day17JDK5.0新特性与正则表达式
    day12-day15集合
    day11线程
    day10-JavaAPI
    day09面向对象-
    day08面向对象-内部类、异常
    day06面向对象
    Idea导入Eclipse中的Maven Web(SSM)
    java给图片添加水印
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5068918.html
Copyright © 2020-2023  润新知