在字符串列表中进行部分搜索

Posted

技术标签:

【中文标题】在字符串列表中进行部分搜索【英文标题】:partial search in a list of strings 【发布时间】:2017-10-23 15:05:24 【问题描述】:

我有一组键用作我的应用程序中快速搜索的索引。

目前,我只能搜索完整的字符串,最大的灵活性是如果我可以搜索出现在字符串中任何位置的部分字符串。当然,最简单的做法是遍历列表中的所有字符串并查找子字符串。这可行,但当列表开始增长时可能太慢了。

我读过一些关于基数树的文章,但这只会让我从字符串的开头进行部分匹配,也可能从字符串的结尾进行部分匹配。

我的问题是我应该看什么算法来解决部分匹配的问题(不是在一个大文档中),而是在一个字符串列表中。如果我保留一个排序的字符串列表,这个问题会更容易吗?如果字符串长度相同,我可以看到这会更容易,但对于可变长度字符串,我无法提出合理的方法。

【问题讨论】:

在搜索之前对字符串进行排序。 【参考方案1】:

如果您保留一个包含所有字符串但带有特定分隔符的大字符串怎么办?从索引中找到部分、子字符串的索引,然后在分隔符上拆分。您现在有了字符串的索引。对字符串的其余部分起泡、冲洗、重复(或使用正则表达式查找所有匹配项)

【讨论】:

【参考方案2】:

后缀树和后缀数组在您想要快速执行部分字符串匹配时很有用。

【讨论】:

以上是关于在字符串列表中进行部分搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何使用字符串列表搜索上下文并对其进行排序?

将包含 X 的字符串部分添加到列表 [重复]

Swift UI:当视图中显示空列表时,如何显示错误消息?

用列表中的字符串替换字符串

在字符串的一部分内进行正则表达式搜索

Flutter:按字符搜索列表