String 识别字符序列中的单词

String 识别字符序列中的单词,string,algorithm,String,Algorithm,我需要一个能够识别单词的算法(基于词典) 在没有空格的字符序列中 比如说,序列是: 无空间 它应该认识到空间和更少 在某些情况下,可以识别更多的单词。 很难给出这样一个例子,但我会尝试一下: 示例:spaceslight 识别词:空格和空格(1) 公认词汇:空间与光(2) 因此,算法也应该能够找到这些变体。如果需要对同一字符串进行多个查询,后缀trie是一个很好的解决方案。这将非常有效地存储字符串,并允许在O(n)中查找查询,其中n是查询的长度(请注意,除非您对查询有更多的了解,否则无法做得更好

我需要一个能够识别单词的算法(基于词典) 在没有空格的字符序列中

比如说,序列是:
无空间
它应该认识到空间和更少

在某些情况下,可以识别更多的单词。 很难给出这样一个例子,但我会尝试一下:

示例:spaceslight
识别词:空格和空格(1)
公认词汇:空间与光(2)


因此,算法也应该能够找到这些变体。

如果需要对同一字符串进行多个查询,后缀trie是一个很好的解决方案。这将非常有效地存储字符串,并允许在O(n)中查找查询,其中n是查询的长度(请注意,除非您对查询有更多的了解,否则无法做得更好)


如果后缀trie仍然占用了太多的空间,您可以使用DAWG,但构建起来要复杂得多。

您也可以尝试Knuth-Morris-Pratt算法。它在文本中搜索字符串。。。如果我没记错的话,它具有线性复杂性。请看一看:


PS:您可能需要根据自己的需要对其进行一点调整…

您可能想看看Rabin-Karp算法,它允许通过文本文件搜索字典中的所有n个字母单词,搜索n的某个值。标准拉宾卡普将发现重叠:spaceslight->spaces,a,ace,aces,slight,light,i。如果你不想让单词重叠,就需要修改它。

你的问题与此类似:我想我还没有尝试过任何东西,但我想到的第一件事是从字典中取出所有单词,并尝试将它们与字符串序列匹配。但是它看起来会非常慢。tnx Ricky,这应该会有帮助,可能会有帮助,昨天才看到。@Tomas Telensky:我的印象是,布置作业的原因是为了让学生尝试。同意,我也希望你能像trie这样做。