问题:给定一个m x n的字符板和一个字符串单词列表,返回板上的所有单词。
class Solution(object):
def findWords(self, board, words):
WORD_KEY = '$'
trie = {}
for word in words:
node = trie
for letter in word:
# retrieve the next node; If not found, create a empty node.
node = node.setdefault(letter, {})
# mark the existence of a word in trie node
node[WORD_KEY] = word
rowNum = len(board)
colNum = len(board[0])
matchedWords = []
def helper(row,col,trie):
if trie.keys()[0]==WORD_KEY:
matchedWords.append(trie[WORD_KEY])
return
if row>len(board)-1 or row<0 or col>len(board[0])-1 or col<0:
return
if board[row][col] == '*':
return
if board[row][col] in trie:
for (rowOffset, colOffset) in [(-1, 0), (0, 1), (1, 0), (0, -1)]:
temp=board[row][col]
board[row][col]='*'
helper(row+rowOffset,col+colOffset,trie[temp])
board[row][col]=temp
else:
return
for i in range(len(board)):
for j in range(len(board[0])):
helper(i,j,trie)
return matchedWords
递归一直是我最大的问题,很难找到错误,我想知道我是如何在代码中出错的。错误的输出如下:[“誓言”,“誓言”,“誓言”,“誓言”,“吃”,“吃”,“吃”,“吃”,“吃”],每个重复4次
而不仅仅是[宣誓,吃饭]
这是一个有效的方法--它纠正了helper
函数中的一些问题:
def backtracking(row, col, parent):
letter = board[row][col]
currNode = parent[letter]
word_match = currNode.pop(WORD_KEY, False)
if word_match:
matchedWords.append(word_match)
board[row][col] = '#' # marked as visited already
# Explore the neighbors in 4 directions
for (rowOffset, colOffset) in [(-1, 0), (0, 1), (1, 0), (0, -1)]:
newRow, newCol = row + rowOffset, col + colOffset
if newRow < 0 or newRow >= rowNum or newCol < 0 or newCol >= colNum:
continue
if not board[newRow][newCol] in currNode:
continue
backtracking(newRow, newCol, currNode)
board[row][col] = letter # end of Exploration, restore it
#remove the matched leaf node in Trie.
if not currNode: parent.pop(letter)
for row in range(rowNum):
for col in range(colNum):
if board[row][col] in trie:
backtracking(row, col, trie)
return matchedWords
问题内容: 我试图实现一个帕特里夏特里结构的方法,以及作为一种手段来存储大字典中的字进行快速检索(包括前缀搜索)的。我已经阅读了这些概念,但是并没有明确说明它们的实现。我想知道(用Java或Python代码)如何实现Trie,特别是节点(或者我应该递归实现)。我看到一个人用将26个子节点设置为null / None来实现它。有没有更好的策略(例如将字母当作位),您将如何实现呢? 问题答案: 有人问
问题内容: 我想在Java中使用Trie,有没有可以使用的实现?(我尝试寻找一个,但没有找到)。 问题答案: 核心Java库中没有trie数据结构。 这可能是因为尝试通常被设计为存储字符串,而Java数据结构更通用,通常包含任何字符串(定义相等性和哈希操作),尽管有时它们限于 对象(定义顺序)。尽管适用于字符串,但没有通用的“符号序列”抽象,我想您可以为其他类型的符号做些事情。 这是要考虑的另一点
我正在实现一个植入拼写词典的trie。trie的基本元素是一个trienode,它由一个字母部分(char)、一个标志(这个char是否是单词的最后一个char)和一个由26个指针组成的数组组成。 TrieNode类的私有部分包括: 这是测试调用的一部分: 现在,我正在尝试遍历trie以计算有多少单词(有多少标志被设置为true)。 每次函数返回0。我知道这是因为当数组中的第一个元素为null时,
问题内容: 是否有任何库或文档/链接提供了有关在Java中实现Trie数据结构的更多信息? 任何帮助将是巨大的! 谢谢。 问题答案: 您可以阅读Java Trie 或查看trie。