L79. Word Search
class Solution(object):
def exist(self, board, word):
"""
:type board: List[List[str]]
:type word: str
:rtype: bool
"""
if not board or not word:
return False
r = len(board)
c = len(board[0])
for i in range(r):
for j in range(c):
if self.helper(board, word, i, j, 0):
return True
return False
def helper(self, board, word, row, col, k):
dirs = [[1, 0], [-1, 0], [0, 1], [0, -1]]
if row > len(board) - 1 or row < 0 or col > len(board[0])-1 or col < 0:
return False
if board[row][col] != word[k]:
return False
else:
if k == len(word) - 1:
return True
else:
temp = False
for dir in dirs:
val = board[row][col]
board[row][col] = None
temp = temp or self.helper(board, word, row + dir[0], col + dir[1], k + 1) # 有一个方向match上即可
board[row][col] = val
return temp
class Solution(object):
def exist(self, board, word):
"""
:type board: List[List[str]]
:type word: str
:rtype: bool
"""
m = len(board)
n = len(board[0])
for i in range(m):
for j in range(n):
if self.dfs(board, word,i, j, 0):
return True
return False
def dfs(self,table, word, i, j, k):
m = len(table)
n = len(table[0])
if k > len(word) - 1:
return False
if i>= 0 and i < m and j>=0 and j < n and table[i][j] == word[k]:
if k == len(word) - 1:
return True
val = table[i][j]
table[i][j] = None
temp = (self.dfs(table, word,i+1, j, k + 1) or self.dfs(table, word,i-1,j, k + 1) or \
self.dfs(table, word,i, j+1, k + 1) or self.dfs(table, word,i, j-1, k + 1))
table[i][j] = val
return temp
#self.table
class Solution(object):
def exist(self, board, word):
"""
:type board: List[List[str]]
:type word: str
:rtype: bool
"""
m = len(board)
n = len(board[0])
self.table = board
for i in range(m):
for j in range(n):
if self.dfs( word,i, j, 0):
return True
return False
def dfs(self, word, i, j, k):
m = len(self.table)
n = len(self.table[0])
if k > len(word) - 1:
return False
if i>= 0 and i < m and j>=0 and j < n and self.table[i][j] == word[k]:
if k == len(word) - 1:
return True
val = self.table[i][j]
self.table[i][j] = None
temp = (self.dfs( word,i+1, j, k + 1) or self.dfs( word,i-1,j, k + 1) or \
self.dfs( word,i, j+1, k + 1) or self.dfs( word,i, j-1, k + 1))
self.table[i][j] = val
return temp
Directly using word search I will cause Time Limit Exceeded
class Solution(object):
def findWords(self, board, words):
"""
:type board: List[List[str]]
:type words: List[str]
:rtype: List[str]
"""
result = []
for word in words:
if self.exist(board, word) and word not in result:
result.append(word)
return result
def exist(self, board, word):
"""
:type board: List[List[str]]
:type word: str
:rtype: bool
"""
m = len(board)
n = len(board[0])
self.table = board
for i in range(m):
for j in range(n):
if self.dfs( word,i, j, 0):
return True
return False
def dfs(self, word, i, j, k):
m = len(self.table)
n = len(self.table[0])
if k > len(word) - 1:
return False
if i>= 0 and i < m and j>=0 and j < n and self.table[i][j] == word[k]:
if k == len(word) - 1:
return True
val = self.table[i][j]
self.table[i][j] = None
temp = (self.dfs( word,i+1, j, k + 1) or self.dfs( word,i-1,j, k + 1) or \
self.dfs( word,i, j+1, k + 1) or self.dfs( word,i, j-1, k + 1))
self.table[i][j] = val
return temp
Last updated
Was this helpful?