如何在数据流中找到循环/重复?

时间:2018-01-11 08:55:43

标签: algorithm data-structures

我在采访中遇到了一个有趣的问题。但是我无法回答它,也没有在Google上找到它。

问题如下:

  

您将获得一个数据流。在变量声明的帮助下,如何找到数据中是否有重复或循环。

数据流的示例是:

100100100100
0001000100010001
100100010001
10...0010....010....01(where 0....0 is 0^10^10^10)

如何解决这个问题?是否存在针对此类问题的算法?

2 个答案:

答案 0 :(得分:5)

我认为这个问题必须有两种方法

<强> 1。最长的重复子字符串问题

这是众所周知的在线性时间内有解的问题。你必须为你的字符串构造suffix tree然后分析它。 有关详细信息,请check this article

<强> 2。重复的子串问题(任何)

您可以修改Longest repeated substring以查找任何重复的子字符串。

答案 1 :(得分:3)

蛮力解决方案是使用地图或字典,即流100100100100它将是:

dict["1"]++
dict["10"]++
dict["100"]++
dict["1001"]++

等直到重复的最大长度才能找到。然后我们删除第一个符号并重复,即删除1并留下00100100100进行分析:

dict["0"]++
dict["00"]++
dict["001"]++
dict["0010"]++

最后,我们遍历地图并打印具有多个值的所有键。

有更高效的算法,但这是我猜的最简单。