【发布时间】:2014-04-21 21:15:15
【问题描述】:
例如,如果输入为“name”,minGram 为 1,maxGramSize 为 2,则输出将由 n,a,m,e,na,am,me 组成。如果 minGram=2, maxGram=4 inputWord=name, output = na,am,me,nam,ame,name。
函数签名可以是这样的:
public List<String> generateNGrams(String input, int minGramSize, int maxGramSize)
最初我尝试使用 for 循环来执行此操作,但我发现很难遵循索引。然后我尝试使用笔和纸的递归来解决它,但我仍在努力解决它。有人可以帮我弄这个吗?
【问题讨论】:
-
这听起来用 for 循环而不是递归来解决它会更自然。如果您发布到目前为止您尝试过的代码,那么您会更容易看到哪里出错了:)
-
这样做是为了自学还是为了生产?在后一种情况下,请查看lucene.apache.org/core/3_0_3/api/all/org/apache/lucene/analysis/…
-
@Drunix 教育自己,而不是生产。我想在没有库的情况下解决它。不过感谢您的链接。
-
然后听从动画师的建议,展示你的尝试。
-
提示:根据您尝试执行的操作,如果您实施文本搜索:不要将所有 n-gram 显式创建到列表中。最好实现一种算法,该算法在文本上滑动
q-window,计算每个 q-gram 上的一些哈希,并将这些输入到静态大小的位数组(“bloom 过滤器”)中。由于无论如何您都必须对候选人进行精确比较,这应该会导致更有效的文本检索。
标签: java string algorithm loops recursion