Leetcode 212. Word Search II
Problem
Given an m x n board of characters and a list of strings words, return all words on the board.
Each word must 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 in a word.
Algorithm
Use Trie for save and search word, run dfs find the word in the board.
Code
class Solution:
def findWords(self, board: List[List[str]], words: List[str]) -> List[str]:
class Trie:
def __init__(self):
self.root = {}
def insert(self, word):
node = self.root
for c in word:
if c not in node:
node[c] = {}
node = node[c]
node['leaf'] = word
trie = Trie()
for word in words:
trie.insert(word)
m, n = len(board), len(board[0])
result = []
def dfs(x, y, node):
c = board[x][y]
if c not in node:
return
next_node = node[c]
word = next_node.get('leaf')
if word:
result.append(word)
next_node['leaf'] = None # need remove
board[x][y] = '#'
for dx, dy in [(-1,0), (1,0), (0,-1), (0,1)]:
nx, ny = x + dx, y + dy
if 0 <= nx < m and 0 <= ny < n and board[nx][ny] != '#':
dfs(nx, ny, next_node)
board[x][y] = c
for i in range(m):
for j in range(n):
dfs(i, j, trie.root)
return list(result)
原文地址:https://blog.csdn.net/mobius_strip/article/details/146445156
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!