Se ho una stringa di input e una serie:Il prefisso più lungo comune utilizzando il buffer?
s = "to_be_or_not_to_be"
pos = [15, 2, 8]
Sto cercando di trovare il più lungo prefisso comune tra gli elementi consecutivi della matrice pos
riferimento all'originale s
. Sto cercando di ottenere il seguente risultato:
longest = [3,1]
Il modo in cui ho ottenuto questo calcolando il più lungo prefisso comune delle seguenti coppie:
s[15:]
che è_be
es[2:]
quali è_be_or_not_to_be
dando 3 (_be
)s[2:]
che è_be_or_not_to_be
es[8:]
che è_not_to_be
dando 1 (_
)
Tuttavia, se s
è enorme, non voglio creare più copie quando faccio qualcosa come s[x:]
. Dopo ore di ricerche, ho trovato la funzione buffer che conserva solo una copia della stringa di input, ma non ero sicuro di quale sia il modo più efficiente di utilizzarlo qui in questo contesto. Qualche suggerimento su come ottenere questo?
+1 Grazie. Fammi controllare le prestazioni di questo frammento e tornare presto. Assolutamente bello! :) – Legend
la tua soluzione 'commonprefix()' è troppo complicata, vedi [il mio commento] (http://stackoverflow.com/questions/8073808/longest-common-prefix-using-buffer/8073962#8073962) – jfs
@JFSebastian Ho visto il tuo commento; non è corretto. La sua uscita desiderata è '[3, 1]', non '_'. Vuole solo le prime due posizioni considerate, quindi solo le seconde due, la tua versione _considerizza tutte e tre in una volta_. – agf