我有一系列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
即检测重复(可能是嵌套的)。
答案 0 :(得分:5)
查看Lempel-Ziv-Welsh compression algorithm。它建立在检测字符串中的重复并利用它们进行压缩的基础上。我相信你可以使用Trie 为了它。
答案 1 :(得分:0)
如果您可以先对其进行排序,那么可以轻松再次查找重复运行。当然,像SQL查询一样对自由格式进行排序听起来有点可怕。
答案 2 :(得分:0)
我不是那个领域的专家,但你可能想看看一些压缩算法,在我看来,这正是他们所做的。
答案 3 :(得分:0)
如果字符串足够大,一个有趣的方法是在其上运行压缩工具(如gzip,bzip或7zip)。这些工具通过定位重复(在不同级别),并通过指向文本的第一个实例(或字典)的替换来工作。您实现的压缩是重复的度量。转储文件(您必须编写代码才能执行此操作)将为您提供重复的内容。