Может ли последовательность единиц содержать собственные повторения? Вы знаете длину последовательности единиц?
, например
ABCABCABCDEFABCABCABCDEFABCABCABCDEF
где единичная последовательность ABCABCABCDEF
Если ответ «да», у вас есть сложная проблема, я думаю, если вы не знаете длину последовательности единиц измерения (в этом случае решение тривиально, вы просто создаете конечный автомат, который сначала сохраняет последовательность единиц измерения) затем проверяет, что каждый элемент остальной части последовательности соответствует каждому элементу единичной последовательности).
Если ответ отрицательный, используйте этот вариант Алгоритм обнаружения циклов Флойда , чтобы определить последовательность единиц:
- Инициализировать указатели P1 и P2 в начале последовательности.
- Для каждого нового элемента, увеличивать указатель P1 каждый раз, и увеличивать указатель P2 каждый раз (держите счетчик для этого).
Если P1 указывает на идентичные элементы P2, вы нашли последовательность единиц.
Теперь повторите всю оставшуюся последовательность, чтобы убедиться, что она состоит из дубликатов.
ОБНОВЛЕНИЕ: вы разъяснили свою проблему, заявив, что последовательность может содержать собственные повторения. В этом случае используйте алгоритм поиска циклов, но гарантированно найти только потенциальные циклы. Поддерживайте его на протяжении всей последовательности и используйте следующий конечный автомат, начиная с состояния 1:
Состояние 1: не найдено ни одного цикла, который работает; продолжай смотреть Когда алгоритм поиска цикла находит потенциальный цикл, убедитесь, что вы получили 2 копии предварительной последовательности единиц из P, и перейдите в состояние 2. Если вы достигли конца ввода, перейдите в состояние 4.
Состояние 2: найдена предварительная последовательность единиц измерения. Выполните ввод, пока цикл повторяется одинаково. Если вы достигли конца ввода, перейдите в состояние 3. Если вы обнаружите, что элемент ввода отличается от соответствующего элемента последовательности единиц, вернитесь в состояние 1.
Состояние 3: вход является повторением последовательности единиц, если конец ввода состоит из полных повторений последовательности единиц. (Если он находится в середине последовательности единиц, например, ABCABCABCABCAB
, то последовательность единиц найдена, но она не состоит из полных повторений.)
Состояние 4: последовательность единиц не найдена.
В моем примере (повторяя ABCABCABCDEF
) алгоритм начинается с поиска ABCABC, который переводит его в состояние 2, и будет оставаться там до тех пор, пока не достигнет первого DEF, который вернет его в состояние 1, затем, вероятно, переходите назад и вперед между состояниями 1 и 2, пока он не достигнет 2-го ABCABCABCDEF, после чего он снова войдет в состояние 2, и в конце ввода он будет в состоянии 3.