Jeśli mam ciąg wejściowy i tablicy:Najdłuższy wspólny prefiks za pomocą bufora?
s = "to_be_or_not_to_be"
pos = [15, 2, 8]
próbuję znaleźć najdłuższy wspólny przedrostek między kolejnymi elementami tablicy pos
odwołującego oryginalny s
. Próbuję uzyskać następujące dane wyjściowe:
longest = [3,1]
Sposób, w jaki uzyskuje się to poprzez obliczenie najdłuższy wspólny przedrostek z następujących parach:
s[15:]
który jest_be
is[2:]
który jest_be_or_not_to_be
dając 3 (_be
)s[2:]
który_be_or_not_to_be
is[8:]
który_not_to_be
daje 1 (_
)
Jednak, jeśli s
jest ogromny, nie chcę tworzyć wielu kopii, gdy robię coś takiego jak s[x:]
. Po wielu godzinach wyszukiwania znalazłem funkcję buffer, która zachowuje tylko jedną kopię ciągu wejściowego, ale nie byłem pewien, jaki jest najskuteczniejszy sposób wykorzystania go tutaj w tym kontekście. Wszelkie sugestie, jak to osiągnąć?
+1 Dziękuję. Pozwól mi sprawdzić skuteczność tego fragmentu i wkrótce go odzyskać. To zdecydowanie wygląda fajnie! :) – Legend
Twoje rozwiązanie 'commonprefix()' jest zbyt skomplikowane, zobacz [mój komentarz] (http://stackoverflow.com/questions/8073808/longest-common-prefix-using-buffer/8073962#8073962) – jfs
@JFSebastian Widziałem twój komentarz; to jest nieprawidłowe. Jego pożądanym wynikiem jest '[3, 1]', a nie '_'. On chce tylko na pierwsze dwie pozycje, a potem tylko na dwie, twoja wersja bierze wszystkie trzy na raz. – agf