【问题标题】:How to find and return a repeating sequence within a vector如何在向量中查找并返回重复序列
【发布时间】:2015-10-03 23:52:28
【问题描述】:

我有一个动态填充的向量,并且总是包含一个重复序列,其中包含我不确定的字符和长度。例如,向量可能包含以下元素:

0 1 1 2 3 1 0 1 1 2 3 1 0 1 1 2 

并且该向量中的重复序列是:

0 1 1 2 3 1

如何搜索向量并找到这些元素。我想把找到的序列放在一个新的向量中。起初我假设它只需要一个简单的 for 循环并检查数组中第一个和第二个元素的重复,所以在上面的情况下,当我第二次到达0 1 时我会退出循环,但问题是不能假设前 2 个元素将处于重复模式中,所以

0 1 2 3 2 3 2 3 2 3

可以是向量中的有效元素。有什么想法吗?

【问题讨论】:

  • 或许可以参考这个:stackoverflow.com/questions/10355103/…
  • stackoverflow.com/questions/11090289/…。这个问题相当于通过一些调整来找到最大的模式。在寻找最长的模式时,如果最后发现的模式小于新发现的模式,算法会丢弃它,但在您的情况下,如果新的较长模式不与旧模式重叠,您可能希望保留它。
  • 你想要最长的重复序列,是吗?
  • @Beta 是的,这是正确的

标签: c++ vector


【解决方案1】:

一般(无限结果)不可能知道序列,因为类似的事情可能会发生 100 万个 0 然后 1,在 1000 个零之后你会认为序列只是零,但是如果向量是有限的 你可以写一些这样的想法

for(I..VECTORSIZE / 2)
if(VECTORSIZE  % I == 0)
 CHECK IF SUBVECTOR(0,I) == SUBVECTOR(I,I*2) == SUBVECTOR(I*2,I*3)....
    return I
else continute;

【讨论】:

    猜你喜欢
    • 2012-02-13
    • 2014-11-10
    • 2018-04-02
    • 2019-04-14
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多