我没有在trie中得到概念这个词的结尾。我认为我对特里本身的理解是不完整的。有人可以在代码HERE
中解释以下内容// If this is end of a word, then update prevMatch
if( crawl.isEnd() )
prevMatch = level + 1;
答案 0 :(得分:1)
IsEnd killswitch在单词结束时设置,但它不是trie或搜索的结尾。单词被词典存储到树或散列图中。可能会发生搜索词不是第一个或第二个杀戮开关。
答案 1 :(得分:0)
当代码爬上trie搜索gifen单词的最长前缀时会发生这种情况。
假设你有一个已包含单词的特里:
“的” “一” “一次”
并且您正在尝试搜索“繁重”的最长前缀,您希望它在3处出现(即“1”是已经存在的最长前缀。
正在执行的代码为:
// See if there is a Trie edge for the current character
if (child.containsKey(ch)) {
result += ch; //Update result
crawl = child.get(ch); //Update crawl to move down in Trie
// If this is end of a word, then update prevMatch
if (crawl.isEnd()) {
prevMatch = level + 1;
}
} else {
break;
}
所以想象一下,你正在看着“繁重”的“n”。您发现“on”作为片段在trie中,但不是end
(因为您没有在trie中单词“on”但是单词“one” 在那里)。此代码将继续使用下一个字符“e”爬树,但不会更改prevMatch
。然而,当它看到“e”时,树中的匹配和它是end
,因为单词“one”在树中,所以此代码存储{{1在3
。