leercode Word Search
来源:互联网 发布:自组织网络算法 编辑:程序博客网 时间:2024/06/06 03:55
题目
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 =
[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]
word = "ABCCED"
, -> returnstrue
,
word = "SEE"
, -> returnstrue
,
word = "ABCB"
, -> returnsfalse
.
思路
顺序遍历board,找到其中与word第一个字符相等的字符,将其入栈,循环将栈顶结点四周可能的元素入栈,直到匹配完成整个word或者栈空。
struct Node{ int x; int y; char Char; int i; Node(){} Node(int xTemp, int yTemp, char CharTemp, int iTemp):x(xTemp) , y(yTemp) , Char(CharTemp),i(iTemp){} void Create(int xTemp, int yTemp, char CharTemp, int iTemp){ x = xTemp; y = yTemp; Char = CharTemp; i = iTemp; } void Create(Node &Temp){ x = Temp.x; y = Temp.y; Char = Temp.Char; i = Temp.i; }};class Solution {public: bool exist(vector<vector<char>>& board, string word) { int hight = board.size(); int width = board[0].size(); vector<vector<bool>> visited(hight,vector<bool>(width,false)); for(int i = 0 ; i < hight ;i++){ for(int j = 0 ; j < width ; j++){ if(board[i][j] == word[0]){ if(IsWordExist(board,word,i,j,visited) == true){ return true; } } } } return false; } bool IsWordExist(vector<vector<char>>& board , string word , int x ,int y ,vector<vector<bool>>& visited){ stack<Node> CharStk; //字符栈 Node Temp(x,y,board[x][y],0); Node left; Node right; Node up; Node down; Node Top; CharStk.push(Temp); while(!CharStk.empty()){ Top.Create(CharStk.top()); if(Top.Char == word[Top.i]){ if(visited[Top.x][Top.y] == false){ if(Top.i == word.size()-1){ return true; } visited[Top.x][Top.y] = true; if((Top.x-1) >= 0){ if(visited[Top.x-1][Top.y] == false){ left.Create(Top.x-1, Top.y, board[Top.x-1][Top.y], Top.i+1); CharStk.push(left); } } if((Top.x+1) < board.size()){ if(visited[Top.x+1][Top.y] == false){ right.Create(Top.x+1, Top.y, board[Top.x+1][Top.y], Top.i+1); CharStk.push(right); } } if((Top.y-1) >= 0){ if(visited[Top.x][Top.y-1] == false){ down.Create(Top.x, Top.y-1, board[Top.x][Top.y-1], Top.i+1); CharStk.push(down); } } if((Top.y+1) < board[0].size()){ if(visited[Top.x][Top.y+1] == false){ up.Create(Top.x, Top.y+1, board[Top.x][Top.y+1], Top.i+1); CharStk.push(up); } } } else{ CharStk.pop(); visited[Top.x][Top.y] = false; } }else{ CharStk.pop(); } } return false; }};
0 0
- leercode Word Search
- Leercode 35 Search Insert Position
- Word Search
- Word Search
- word search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Word Search
- Opencv3.1+python2.7的CentOS7安装
- 51. N-Queens && 52. N-Queens II
- UPYUN的云CDN技术架构演进之路
- ArcGIS中QueryTask,FindTask,IndentifyTask 之间的区别
- 介绍几个网站(关于iOS)
- leercode Word Search
- IOS DEMO大全
- 调用远程服务
- Docker入门实战-SSH连接docker容器
- 前台图片样式的相关处理
- LeetCode_OJ【40】Combination Sum II
- nodejs Tips7
- Vim Global Command用法(g命令)
- ajaxFileUpload 怎么传相关参数到后台