forked from sachuverma/DataStructures-Algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWord Search.cpp
More file actions
64 lines (50 loc) · 1.77 KB
/
Word Search.cpp
File metadata and controls
64 lines (50 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
Word Search
===========
Given an m x n board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cells, where "adjacent" cells are horizontally or vertically neighboring. The same letter cell may not be used more than once.
Example 1:
Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
Output: true
Example 2:
Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
Output: true
Example 3:
Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
Output: false
Constraints:
m == board.length
n = board[i].length
1 <= m, n <= 200
1 <= word.length <= 103
board and word consists only of lowercase and uppercase English letters.
*/
class Solution
{
bool exist(vector<vector<char>> &board, vector<vector<int>> &visited, int r, int c, string word, int i)
{
if (i == word.size())
return true;
if (r < 0 || c < 0 || r >= board.size() || c >= board[0].size() || i > word.size() || board[r][c] != word[i] || visited[r][c])
return false;
visited[r][c] = 1;
bool ans = false;
ans = ans || exist(board, visited, r + 1, c, word, i + 1) || exist(board, visited, r - 1, c, word, i + 1) || exist(board, visited, r, c + 1, word, i + 1) || exist(board, visited, r, c - 1, word, i + 1);
visited[r][c] = 0;
return ans;
}
public:
bool exist(vector<vector<char>> &board, string word)
{
vector<vector<int>> visited(board.size(), vector<int>(board[0].size(), 0));
for (int i = 0; i < board.size(); ++i)
{
for (int j = 0; j < board[0].size(); ++j)
{
if (board[i][j] == word[0] && exist(board, visited, i, j, word, 0))
return true;
}
}
return false;
}
};