java – 找出一个单词是否可以是字典中单词的开头

我必须找出一个给定的单词是否可以作为字典中其他单词的开头.

我使用TreeSet实现了字典.

TreeSet字典
   String startString;

问题1

找出startString是否是字典中至少一个单词的起始位置的最有效方法是什么?

想法1

我的想法是使用dictionary.subSet(startString,startStringPlusOne);

其中startStringPlusOne等于startString,但最后一个字符除外,该字符是字母表中的下一个字符.

例:

startString: hom
startStringPlusOne: hon

通过这种方式,SubSet返回一个空集,这意味着字符串不是字典中单词的开头.

问题2

计算stringPlusOne的最有效方法是什么?

想法2

我想使用带字母字母的字符数组,并用数组中的以下字符替换字符串的最后一个字母.
有更有效的方法吗?

最佳答案
如果记忆不是一个问题,我会想要存储两个词典.你把你的话放到另一个,你把你的话开始.

1)
["aardvark", "banana", "band"]

2)
{
    "aardvar" => 1,
    "aardva" => 1,
    "aardv" => 1,
    "aard" => 1, 
    "aar" => 1, 
    "aa" => 1, 
    "a" => 1, 
    "banan" => 1, 
    "bana" => 1, 
    "ban" => 2, 
    "ba" => 2, 
    "b" => 2
}

所以问题的答案是“有没有以’禁令’开头的话?”是“是的,有2个”.你的问题并没有说明是否有必要找出那些是什么词.

如果您需要从字典中删除单词,则计数才真正有用.如果是这样,您将需要递减计数并在它们达到0时删除键.如果您不需要这样做,那么您不需要存储该数字.

如果您需要回答“哪些单词以’禁止’开头?”的问题,那么您需要存储对这些单词的引用而不仅仅是计数,例如

"ban" => ["banana", "band"]

就速度而言,这似乎是最有效的,但是以记忆效率为代价(这可能不是值得担心的问题).

转载注明原文:java – 找出一个单词是否可以是字典中单词的开头 - 代码日志