输入:一个字符串数组和一个字符串。
任务:查找数组中所有条目的所有条目,其中条目的任何子字符串与输入字符串匹配。
可以以任何所需的方式准备或排序输入数组,并且需要构建任何辅助数据结构。准备数据结构所需的时间(在理智范围内)并不重要。
目标是搜索的最高速度。
您使用的算法不仅仅是线性搜索吗?
答案 0 :(得分:0)
因为它说准备数据结构所需的时间并不重要,所以我会哈希它。键是一个字符串(特别是一个子字符串),该值是与数组中索引相对应的整数列表,其中元素的键具有键作为子字符串。
要构建,请获取数组中的每个字符串并确定该字符串的所有可能的子字符串,将每个此类键值对插入到哈希表中。如果密钥已存在,请将索引附加到列表中,而不是插入/创建新列表。
一旦你构建了这个哈希表,它就像O(1)根据输入字符串获取列表一样容易并返回。
编辑:仔细观察这个问题,看起来你想要在数组中返回实际的字符串,而不是它们的索引。哈希表方法将以任何一种方式工作。
答案 1 :(得分:0)
您可能希望构建所有字符串后缀的索引。查看suffix trees以了解如何完成此操作。维基百科的文章可能过于笼统,所以这里是一个改编的算法:
构建索引
<强>搜索强>
对于长度为N但仅有N个后缀的字符串,有N²/ 2个子串。因此,基于后缀的数据结构应该比基于子串的内存更有效。