当前位置: 首页 > 面试题库 >

如何在Java中创建简单的前缀索引?

李联
2023-03-14
问题内容

我有很多网址,并且想实现自动补全功能。我不喜欢朴素方法的复杂性,因为它与设置大小成线性关系:

for(String url: urls) if(url.startsWith(input) {doSomething();}

现在我知道在哈希集中,函数“ contains()”在“ O(1)”中有效,但是没有“
containsPrefix()”。是否有一种简单的方法,而无需使用像Lucene这样的大库或自己编写代码?我这样做没有问题,但对于这样一个简单的问题似乎有点过头了,所以我想知道是否存在现有的简单解决方案:-)

从我的计算机科学课程中,我记得一棵由字符串片段组成的树,但我忘记了如何调用它。它像这样工作:

[car, care, carrot,carrotville]->

car
|
-/
-e
-rrot
  |
  ----ville

PS:如何调用返回字符串作为前缀的所有字符串的方法?就像a是b的前缀一样,b对a是什么?


问题答案:

如果您需要有效地查找字符串的前缀,请使用Trie,这是专门为此目的设计的数据结构:

特里树或前缀树是一种有序的树数据结构,用于存储键通常为字符串的关联数组。与二叉搜索树不同,树中没有节点存储与该节点关联的密钥。相反,它在树中的位置定义了与其关联的键。节点的所有后代具有与该节点关联的字符串的公共前缀,并且根与空字符串关联

两个链接与示例
实现。



 类似资料:
  • 问题内容: 我目前正在学习Java,并且想知道如何以OO方式控制状态。我实现了一个Pong应用程序。如果我想要多个状态,例如游戏性和菜单状态,并且这些状态中的每个状态都必须执行启动,停止和运行,我将如何实现此目标以及如何在这些状态之间进行切换。 我知道我可以简单地添加一个大的switch语句,但是实现这一点的最佳方法是什么? 我希望能够在游戏状态下切换到菜单状态,反之亦然。 问题答案: 您可以使用

  • 因此,我试图在SML中创建一个解析器程序,提示用户输入表达式。然后,它会告知输入的表达式是后缀、前缀还是中缀,然后显示结果。下面是我希望它做的一个示例: 我在创建函数时遇到了麻烦,这样它就会向屏幕输出结果,我不确定我是否正确地执行了该方法。在我首先计算出转换之前,我甚至不会专注于输出树。 我觉得我应该在第二个if语句中放一个递归方法(检查与运算符是否相等),但由于Alice SML语法的限制,我不

  • 我正试图创建一个代理服务器,将请求从客户端传递到第三方网站(比如谷歌)。我的代理只需要将传入请求镜像到目标站点上相应的路径,因此如果我的客户端请求的url为: 应提供以下资源: 以下是我想出来的: 它可以很好地处理html页面,但是对于其他类型的文件,它只是返回一个空白页面或目标站点的一些错误消息(这在不同的站点中有所不同)。

  • 我需要在搜索表单下显示一个自定义的“资产管理搜索轨道”。我创建了一个覆盖到“/libs/dam/gui/content/facets”的覆盖层,并且能够编辑显示在资产搜索方面的字段。 现在,当作者在“我的项目”文件夹(/content/dam/myapps)中搜索时,与从其他文件夹(/content/dam)中搜索相比,刻面项需要是不同的列表 如何创建一个类似于现有的“资产管理搜索栏”的新“资产管

  • 本文向大家介绍如何使用Java在MongoDB中创建索引?,包括了如何使用Java在MongoDB中创建索引?的使用技巧和注意事项,需要的朋友参考一下 在MongoDB中创建索引,您需要使用createIndex()方法。 语法 其中的键是要在其上创建索引的文件的名称,而1是升序。要以降序创建索引,您需要使用-1。 在Java中,您可以使用 createIndex()方法创建索引,该方法需要传递索

  • 问题内容: 我正在探索用Java创建简单业务规则引擎的不同方法。我需要为客户提供一个简单的webapp,让他配置一堆规则。规则库示例可能如下所示: 例子如下: 规则引擎非常简单,最终动作可能只是发送给住院病人或门诊病人的两个动作之一。表达式中涉及的运算符可以为,而表达式之间的逻辑运算符为。 我想构建一个Web应用程序,其中用户将用编写一个小脚本,然后对表达式进行评估- 这样,业务规则用简单的英语进