此题在数据大些,而且全是A的情况下会超时(因为要匹配到很后面才false)。通过利用数组本身作为visited标示,而且使用string引用,得意通过。
|
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 |
bool
find(vector<vector<char> > &grid, string &pattern, int
i, int
j, int
k) { if
(k == pattern.length()) return
true; int
m = grid.size(); int
n = grid[0].size(); if
(i < 0 || i >= m || j < 0 || j >= n) return
false; if
(pattern[k] == grid[i][j] && grid[i][j] != ‘#‘) { char
c = grid[i][j]; grid[i][j] = ‘#‘; if
(find(grid, pattern, i-1, j, k+1) || find(grid, pattern, i+1, j, k+1) || find(grid, pattern, i, j-1, k+1) || find(grid, pattern, i, j+1, k+1)) { grid[i][j] = c; return
true; } else
{ grid[i][j] = c; return
false; } } else
{ return
false; }}bool
exists(vector<vector<char> > &grid, string pattern) { int
m = grid.size(); if
(m == 0) return
false; int
n = grid[0].size(); if
(n == 0) return
false; for
(int
i = 0; i < m; i++) { for
(int
j = 0; j < n; j++) { if
(find(grid, pattern, i, j, 0)) return
true; } } return
false;} |
原文:http://www.cnblogs.com/lautsie/p/3526310.html