leetcode #79 in cpp
来源:互联网 发布:sqoop导入数据到oracle 编辑:程序博客网 时间:2024/05/18 13:28
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"
, -> returns true
,word =
"SEE"
, -> returns true
,word =
"ABCB"
, -> returns false
.Solution;
This is a basic DFS search for string. Simply find the first character and perform DFS in 4 direction for next characters.
Code:
class Solution {public: int dir[4][2] = {{1,0},{0,1}, {-1, 0}, {0,-1}}; bool exist(vector<vector<char>>& board, string word) { if(board.empty()) return false; int m = board.size(); int n = board[0].size(); vector<vector<bool>> visited(m, vector<bool>(n, false)); for(int i = 0; i < m; i ++){ for(int j = 0; j < n; j ++){ if(board[i][j] == word[0]){//find the match of the first character, then start from this point to locate the string visited[i][j] = true;//note this position as visited. This is because 1 letter could be used once. if(search(i, j, 1,visited, word, board)) return true; else visited[i][j] = false;//if next characters not found, go to find another starting point } } } return false; } bool search(int cur_row, int cur_col,int search_pos, vector<vector<bool>> &visited, string &word, vector<vector<char>> &board) { if(search_pos >= word.length()) return true;//if searching position is over the string length, <span style="white-space:pre"></span>//it means we successfully reach the end //search for the letter at search_ind for(int i = 0; i < 4; i ++){//search for 4 directions int row = cur_row + dir[i][0]; int col = cur_col + dir[i][1];<span style="white-space:pre"></span>//see if this position is out of bound and if this position has the character we want to find. If character matches,<span style="white-space:pre"></span>// go to the next recurrence for next character if(row < board.size() && row >=0 && col < board[0].size() && col >= 0 && !visited[row][col] && board[row][col] == word[search_pos]){ visited[row][col] = true; if(search(row, col, search_pos+1, visited, word, board)) return true; else visited[row][col] = false; } } return false; }};
0 0
- leetcode #79 in cpp
- leetcode #12 in cpp
- Leetcode #13 in cpp
- Leetcode #14 in cpp
- leetcode %15 in cpp
- leetcode #16 in cpp
- leetcode #17 in cpp
- leetcode #18 in cpp
- leetcode #20 in cpp
- leetcode #21 in cpp
- leetcode #22 in cpp
- leetcode #23 in cpp
- leetcode #24 in cpp
- leetcode #25 in cpp
- leetcode #26 in cpp
- leetcode #27 in cpp
- leetcode #28 in cpp
- leetcode #29 in cpp
- GUI(图形用户界面)
- JAVA内存结构之运行时栈帧结构
- Arrays.asList不能remove、add等,抛UnsupportedOperationException
- android之蓝牙控制小四轴飞行器
- Solr4.4入门,介绍Solr的安装、IK分词器的配置及高亮查询结果(一)
- leetcode #79 in cpp
- jsp页面中的post提交方式
- Solr中配置文件schema.xml之copyField 与multiValued用途
- PlantUML 使用
- 压缩图片尺寸
- 大型网站架构演化发展历程
- Android 上自定义的复式折线图(二)
- mattermost-系列一,介绍
- iOS应用性能调优的25个建议和技巧