2015-06-30 2 views
1

Я пытаюсь удалить каждый символ, повторенный более чем в 2 раза из чрезвычайно длинной строки. Так, например, слово Terrrrrrific становится Terrific.Как удалить все повторяющиеся слова и буквы строки?

Теперь мой вопрос: как отфильтровать повторы, которые включают более одного символа, таким же образом, т.е. если у меня есть Words words words words words Я хочу отфильтровать его до words words, однако это может быть что-то менее разумное, например как abcdabcdabcdabcdabcd, который должен стать abcdabcd.

Я подозреваю, что должен использовать дерево суффикса, но я не уверен, как правильно идти по алгоритму.

+0

Что вы ищете, также известные как «тандемные повторы» (из-за связанную задачу с участием Последовательности ДНК). Когда вы разрешаете более одного символа, вы должны тщательно определить, что вы подразумеваете под повторением: например. 'слова слова слова слова слова' также содержит 3 (перекрывающиеся) повторения строки' слова слова слова'. –

ответ

0

Я не знаю, это ли эффективный алгоритм для вас, но вы можете сделать это:

  1. Выберите длину для нахождения повторов
  2. Тогда для каждого начальной точки от 0 до длины 1-пройти через строку
  3. поддерживать стек (вы используете непересекающиеся подстроки и нажмите на стек, если два топ из стека отличается от них)