如何检测字符串列表中的重复?

时间:2008-12-08 15:12:54

标签: algorithm string analysis

我有一系列SQL调用,我想用它来检测循环(因此不必要的重复sql调用),但它让我想到了这个更普遍的问题。

给出一个清单,比方说 [a,b,c,b,c,a,b,c,b,c,a,b,b]

我有什么方法可以把它变成 a,[[b,c]*2,a]*2,b*2

或,[a,[b,c]*2]*2,a,b*2

即检测重复(可能是嵌套的)。

4 个答案:

答案 0 :(得分:5)

查看Lempel-Ziv-Welsh compression algorithm。它建立在检测字符串中的重复并利用它们进行压缩的基础上。我相信你可以使用Trie  为了它。

答案 1 :(得分:0)

如果您可以先对其进行排序,那么可以轻松再次查找重复运行。当然,像SQL查询一样对自由格式进行排序听起来有点可怕。

答案 2 :(得分:0)

我不是那个领域的专家,但你可能想看看一些压缩算法,在我看来,这正是他们所做的。

答案 3 :(得分:0)

如果字符串足够大,一个有趣的方法是在其上运行压缩工具(如gzip,bzip或7zip)。这些工具通过定位重复(在不同级别),并通过指向文本的第一个实例(或字典)的替换来工作。您实现的压缩是重复的度量。转储文件(您必须编写代码才能执行此操作)将为您提供重复的内容。