Si tengo una cadena de entrada y una matriz:¿El prefijo común más largo usa el búfer?
s = "to_be_or_not_to_be"
pos = [15, 2, 8]
Estoy tratando de encontrar el prefijo común más largo entre los elementos consecutivos de la matriz pos
referencia al original s
. Estoy tratando de obtener el siguiente resultado:
longest = [3,1]
La forma obtuve esto es calculando el prefijo común más largo de los siguientes pares:
s[15:]
que es_be
ys[2:]
cuales es_be_or_not_to_be
dar 3 (_be
)s[2:]
que es_be_or_not_to_be
ys[8:]
que se_not_to_be
dando 1 (_
)
Sin embargo, si s
es enorme, no quiero crear copias múltiples cuando hago algo como s[x:]
. Después de horas de búsqueda, encontré la función buffer que mantiene solo una copia de la cadena de entrada, pero no estaba seguro de cuál es la forma más eficiente de utilizarla aquí en este contexto. ¿Alguna sugerencia sobre cómo lograr esto?
+1 Gracias. Déjame revisar el rendimiento de este fragmento y volver pronto. Definitivamente se ve genial! :) – Legend
su solución 'commonprefix()' es demasiado complicada, vea [mi comentario] (http://stackoverflow.com/questions/8073808/longest-common-prefix-using-buffer/8073962#8073962) – jfs
@JFSebastian Vi tu comentario; es incorrecto Su salida deseada es '[3, 1]', no '_'. Quiere solo considerar los dos primeros puestos, luego _los dos segundos_, su versión _considera los tres al mismo tiempo_. – agf