找到两个字符串匹配的有效方法

时间:2010-09-11 06:00:02

标签: algorithm language-agnostic search theory

我需要找到针对两个字符串的所有相等的子串。我已经尝试使用后缀树来查找子字符串,它工作得很快,但是内存消耗太大(不适合我的任务)。
还有其他想法吗?

3 个答案:

答案 0 :(得分:0)

Aho-corasick是一个很好的实现,用于匹配任意数量的字符串,并且性能问题最小。你试过吗?

答案 1 :(得分:0)

你可以做滑动窗口,虽然内存较少,但更耗时。

最小的子串是一个字符(实际上,空字是一个,但让我们把它放在一边)。

取字符串1中的字符1,并将字符2中该字符的位置保存在某种数据结构中,如地图或数组。

然后你拿下一个,(字符串1的字符2)并做同样的事情。

一旦你到达字符串1的末尾,你就重新开始,但这次你取字符串1的每两个字符,然后一个字符检查字符串2中的所有位置。

只要您检查的子字符串长度等于字符串1,就可以执行此操作,这意味着您将字符串1和2作为一个整体进行比较。

请记住:当字符串2长于字符串1时,您需要在字符串2上每个字符前进一次整个字符串1,因为字符串1可能是字符串2的子字符串。

如果字符串1大于字符串2,则可以停止查询,一旦您的子字符串长于字符串2,那么所有其他子字符串将被检查。理想情况下,您最终会得到一个地图(最简单的形式是二维数组),它将字符串1中每个子字符串的位置保存在字符串2中。

答案 2 :(得分:0)

为什么你说后缀树太耗费内存?如果实现正确,它只消耗O( n )内存。