Advertisement
Guest User

Word Search

a guest
Jan 13th, 2020
502
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.30 KB | None | 0 0
  1. class Solution:
  2.     def exist(self, board: List[List[str]], word: str) -> bool:
  3.         if not board or not board[0]:
  4.             return False
  5.         row_len = len(board)
  6.         col_len = len(board[0])
  7.         for i in range(row_len):
  8.             for j in range(col_len):
  9.                 if board[i][j] == word[0]:
  10.                     if self.dfs(board, (i, j), word):
  11.                         return True
  12.         return False
  13.  
  14.     def dfs(self, board, start, word):
  15.         my_stack = []
  16.         visited = set()
  17.         my_stack.append((start[0], start[1], 0, False))
  18.         word_len = len(word)
  19.         row_len = len(board)
  20.         col_len = len(board[0])
  21.         while my_stack:
  22.             i, j, level, backtrack = my_stack.pop()
  23.             if backtrack:
  24.                 visited.remove((i, j))
  25.                 continue
  26.  
  27.             visited.add((i, j))
  28.             my_stack.append((i, j, 0, True))
  29.             if level == word_len - 1 and board[i][j] == word[level]:
  30.                 return True
  31.  
  32.             for x, y in ((i + 1, j), (i - 1, j), (i, j + 1), (i, j - 1)):
  33.                 if 0 <= x < row_len and 0 <= y < col_len and (x, y) not in visited and board[x][y] == word[
  34.                     level + 1]:
  35.                     my_stack.append((x, y, level + 1, False))
  36.  
  37.         return False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement