-
Notifications
You must be signed in to change notification settings - Fork 0
/
13-word-search.py
28 lines (22 loc) · 989 Bytes
/
13-word-search.py
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
# Given an m x n grid of characters board and a string word, return true if 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.
#COMPLEXITY = O(M*N*4^n)
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
ROWS,COLS = len(board), len(board[0])
path = set()
def dfs(r,c,i):
if i == len(word):
return True
if (r < 0 or c < 0 or r >= ROWS or c >= COLS or word[i] != board[r][c] or (r,c) in path):
return False
path.add((r,c))
res = (dfs(r+1,c,i+1) or dfs(r-1,c,i+1) or dfs(r,c+1,i+1) or dfs(r,c-1,i+1))
path.remove((r,c))
return res
for r in range(ROWS):
for c in range(COLS):
if dfs(r,c,0): return True
return False