题目:
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] 给定 word = "ABCCED", 返回 true. 给定 word = "SEE", 返回 true. 给定 word = "ABCB", 返回 false.
代码:
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
rows,cols = len(board),len(board[0])
if rows*cols < len(word):
return False
if board == None or rows < 1 or cols<1 or word == None:
return False
visited = [[False for i in range(cols)]for i in range(rows)]
pathLength = 0
for i in range(rows):
for j in range(cols):
if self.hasPathCore(board,rows,cols,i,j,word,pathLength,visited):
return True
return False
def hasPathCore(self,board,rows,cols,row,col,word,pathLength,visited):
if pathLength>len(word)-1:
return True
hasPath = False
if row>=0 and row<rows and col>=0 and col<cols and board[row][col]==word[pathLength] and not visited[row][col]:
pathLength += 1
visited[row][col] = True
hasPath = self.hasPathCore(board,rows,cols,row,col-1,word,pathLength,visited) or self.hasPathCore(board,rows,cols,row,col+1,word,pathLength,visited) or self.hasPathCore(board,rows,cols,row-1,col,word,pathLength,visited) or self.hasPathCore(board,rows,cols,row+1,col,word,pathLength,visited)
if not hasPath:
pathLength -=1
visited[row][col] = False
return hasPath