212 Word Search II
[
['o','a','a','n'],
['e','t','a','e'],
['i','h','k','r'],
['i','f','l','v']
]import numpy as np
class Solution:
def findWords(self, board, words):
"""
:type board: List[List[str]]
:type words: List[str]
:rtype: List[str]
"""
if not board:
return [[]]
def make_trie(words):
trie = {}
for word in words:
iter_trie = trie
for letter in word:
if letter not in iter_trie:
iter_trie[letter] = {}
iter_trie = iter_trie[letter]
iter_trie['#'] = '#'
return trie
trie = make_trie(words)
visited = np.zeros((len(board), len(board[0])))
rotations = [(1, 0), (0, 1), (-1, 0), (0, -1)]
results = []
def in_board(row, col):
return row >= 0 and col >= 0 and row < len(board) and col < len(board[0])
def dfs_find(row, col, trie, path):
if '#' in trie:
results.append(path)
if not in_board(row, col) or visited[row][col] or board[row][col] not in trie:
return
else:
target_c = board[row][col]
visited[row][col] = 1
for r, c in rotations:
dfs_find(row + r, col + c, trie[target_c], path + target_c)
visited[row][col] = 0
for i, row in enumerate(board):
for j, char in enumerate(row):
dfs_find(i, j, trie, '')
return list(set(results))
board = [
['o','a','a','n'],
['e','t','a','e'],
['i','h','k','r'],
['i','f','l','v']
]
obj = Solution()
print(obj.findWords([["a"]], ["a"])) # ["a"]
print(obj.findWords(board, ["oath", "pea", "eat", "rain"])) # ["eat","oath"]
print(obj.findWords([["a","b"],["a","a"]], ["aba","baa","bab","aaab","aaa","aaaa","aaba"])) # ["aaa","aaab","aaba","aba","baa"]Last updated