Java 列表中的子字符串

Java 列表中的子字符串,java,lightweight-stream-api,Java,Lightweight Stream Api,我有一个课程和方法 class Dictionary { public Dictionary(List<String> dic) { // ... } public int getCount(String substr) { // ... } } 复杂性为O(n) 有更好的解决方案吗 谢谢大家! 您可以对列表进行排序,然后在找到一个不是以您的搜索词开头的项目时停止搜索(但只有在找到一个后)。你可以通过开始字母

我有一个课程和方法

class Dictionary {
    public Dictionary(List<String> dic) {
        // ...
    }
    
    public int getCount(String substr) {
        // ...
    }
}
复杂性为O(n)

有更好的解决方案吗


谢谢大家!

您可以对列表进行排序,然后在找到一个不是以您的搜索词开头的项目时停止搜索(但只有在找到一个后)。你可以通过开始字母来进行散列和分组,然后只在桶中查找该字母。无论哪种方式,如果这不仅仅是为了学校,那么在尝试优化之前先对其进行分析。你的解决方案看起来很好,就像你构建问题的方式一样。但通常情况下,字典不仅仅是一个列表,它是一个排序列表如果是这样的话,那么你可以使用修改过的二进制搜索来找到第一个匹配的子字符串,然后从那里开始交互,直到找到最后一个。找到最后一个后,您可以返回-不会返回其他条目match@pshemo当建议用户在CR上发表文章时,如果还有类似“请阅读相关帮助中心页面,如”“和”“之类的建议,那就太好了。”。在当前的形式中,上面的代码可能会被关闭,因为方法是存根。。。这种情况经常发生often@Sᴀᴍ在…上ᴇᴌᴀ 谢谢你的指导。删除了我的评论,因为您声称问题(当前形式)不符合CR要求。您可以对列表进行排序,然后在找到一个不以搜索词开头的项目后停止搜索(但只有在找到一个后)。你可以通过开始字母来进行散列和分组,然后只在桶中查找该字母。无论哪种方式,如果这不仅仅是为了学校,那么在尝试优化之前先对其进行分析。你的解决方案看起来很好,就像你构建问题的方式一样。但通常情况下,字典不仅仅是一个列表,它是一个排序列表如果是这样的话,那么你可以使用修改过的二进制搜索来找到第一个匹配的子字符串,然后从那里开始交互,直到找到最后一个。找到最后一个后,您可以返回-不会返回其他条目match@pshemo当建议用户在CR上发表文章时,如果还有类似“请阅读相关帮助中心页面,如”“和”“之类的建议,那就太好了。”。在当前的形式中,上面的代码可能会被关闭,因为方法是存根。。。这种情况经常发生often@Sᴀᴍ在…上ᴇᴌᴀ 谢谢你的指导。删除我的评论,因为您声称问题(当前形式)不符合CR要求。
return (int) this.dic.stream().filter(s -> s.startsWith(substr)).count();