我在Java中有一个包含字符串(特别是单词)的TreeSet。我需要写一个方法......
public boolean isValidPrefix(String prefix)
...接受前缀作为参数并检查TreeSet以查看其包含的任何单词是否以前缀开头。
例如,假设前缀“CA”和包含 {“DOG,”CAT“,”COW“} 的TreeSet,我的方法需要识别出有一个单词“CAT”,以前缀开头。
P.S。我会遍历TreeSet,但时间复杂度是一个明显的约束,因为TreeList在许多情况下最多可达200,000个单词。
答案 0 :(得分:5)
如果一个字符串foo
是TreeSet中另一个字符串bar
的前缀,我相信bar
可以立即关注foo
在TreeSet中。
因此,我认为只需TreeSet.ceiling(foo)
并检查foo
是否为其前缀。
从该函数的文档中,我们看到它确切地返回了按顺序跟随给定元素的元素。
返回此集合中的最小元素大于或等于 给定元素,如果没有这样的元素,则返回null。
算法将是:
TreeSet.ceiling()
。如果返回值为null
,则返回false
。null
,则返回输入是否为返回值的有效前缀。