Problem
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.
Algorithm
dfs.
Code
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
if not board or not board[0]:
return word == ""
if word == "":
return True
steps = board.copy()
r = len(board)
c = len(board[0])
d = len(word)
dxy = [[1, 0], [0, 1], [-1, 0], [0, -1]]
def dfs(y, x, k):
# print(steps)
if k == d:
return True
for i in range(4):
yy = y + dxy[i][0]
xx = x + dxy[i][1]
if yy >= 0 and yy < r and xx >= 0 and xx < c:
if not steps[yy][xx] and board[yy][xx] == word[k]:
steps[yy][xx] = k
if dfs(yy, xx, k+1):
return True
steps[yy][xx] = 0
return False
for ir in range(r):
for ic in range(c):
if board[ir][ic] == word[0]:
steps = [[0] * c for _ in range(r)]
steps[ir][ic] = -1
if dfs(ir, ic, 1):
return True
return False