Самый длинный общий префикс с использованием буфера?

Если у меня есть входная строка и массив:

s = "to_be_or_not_to_be" 
pos = [15, 2, 8]

Я пытаюсь найти самый длинный общий префикс между последовательными элементами массива pos , ссылающийся на исходный с .Я пытаюсь получить следующий результат:

longest = [3,1]

Я получил это путем вычисления самого длинного общего префикса следующих пар:

  • s [15:] , который равен _be и s [2:] , что является _be_or_not_to_be , что дает 3 ( _be )
  • s [2:] , что является _be_or_not_to_be и s [8:] , что равно _not_to_be , что дает 1 ( _ )

Однако, если s огромен, я не хочу создавать несколько копий, когда я делаю что-то вроде s [x:] . После нескольких часов поиска я нашел функцию buffer , которая поддерживает только одну копию входной строки, но я не был уверен, как наиболее эффективно использовать ее здесь в этом контексте. Любые предложения о том, как этого добиться?

6
задан Legend 10 November 2011 в 00:59
поделиться