Dada una cadena como argumento, genera la longitud de la (s) subcadena (s) repetida (s) más larga (s) que no se superponen o cero si no existe dicha cadena.
Puede suponer que la cadena de entrada no está vacía.
Ejemplos
abcdefabc: la subcadena abcse repite en las posiciones 1 y 7, por lo que el programa debería generar 3
abcabcabcabcab: abcabco bcabcao cabcabse repiten, por lo que el programa debería generar 6 . (la subcadena abcabcabcabtambién se repite, pero las ocurrencias se superponen, por lo que no lo aceptamos).
aaaaaaa: aaase repite en las posiciones 1 y 4, por ejemplo, por lo que el programa debería generar 3
abcda: ase repite, por lo que el programa debería generar 1
xyz: sin cadena repetida → 0
ababcabcabcabcab: debería devolver 6
Este es el código de golf , por lo que gana menos bytes.
fuente

Respuestas:
brainfuck, 226 bytes
Formateado:
Espera la entrada con o sin una nueva línea final y genera el resultado como un valor de byte .
Pruébalo en línea.
Esto verifica cada prefijo para ver si ocurre más adelante en la cadena, luego corta el primer carácter y repite el proceso hasta que no queden más caracteres.
La cinta se divide en nodos de 3 celdas,
c 0 fdonde
ces un carácter de la cadena dada yfes un indicador que puede ser uno, negativo o cero. Los indicadores distintos de cero se colocan entre los dos caracteres que se comparan actualmente, y los negativos se reservan para las celdas después del final del prefijo actual y antes del comienzo del sufijo actual (es decir, antes del índice de la coincidencia potencial actual).El resultado se almacena a la izquierda de la cadena y se actualiza cada vez que se encuentra una coincidencia.
(La cadena en realidad se procesa en reversa con un
\x01adjunto).fuente
Jalea , 12 bytes
Pruébalo en línea!
Cómo funciona
fuente
œ-Qes realmente genialPerl 6 , 36 bytes
Intentalo
Expandido:
fuente
Retina ,
353230 bytesMuy buen desafío.
Pruébalo en línea
Explicación:
fuente
M%`.como segunda etapa.JavaScript (ES6),
796866 bytesEditar: Guardado
1113 bytes gracias a @Arnauld.fuente
Haskell , 79 bytes
Pruébalo en línea!
fuente
%puede acumular una subsecuencia no contiguo, dando falsos positivos como 2 paraaaenaxayaa,a%des incorrecta, pero también innecesaria. Lo que también significa que puede usar enmaxlugar demaximum.a%dpara""%darreglarlo.aestá vacío.sum[1|(x,y)<-zip a c,x==y]se puede usar en lugar dea!c.Python 3 ,
7572 bytesPruébalo en línea!
fuente
JavaScript, 120
fuente
Casco , 11 bytes
Pruébalo en línea!
Nota: Husk es más nuevo que este desafío.
Explicación
fuente
Perl 5 con
-p40 bytesPruébalo en línea!
fuente
Mathematica,
7565 bytes10 bytes guardados debido a @JingHwan Min .
Función anónima. Toma una cadena como entrada y devuelve un número como salida.
fuente
BlankNullSequence (___)cuandoOverlaps->Allesté allí.Max@StringLength@StringCases[#,a___~~___~~a___:>a,Overlaps->All]&estaría bienStringReplace: PPyth - 16 bytes
Necesito jugar golf convirtiendo todas las cuerdas a longitudes y encontrando el máximo.
Test Suite .
fuente
Clojure, 112 bytes
realiza un bucle dos veces sobre los números
0paran - 1(nsiendo la longitud de la cadena), sueltajcaracteres y divide el resto en partes "iniciales" y "finales". Crea un conjunto de todas las subcadenasede longitudby lo utiliza como una función para verificar sibse encuentra desde allí. Devuelve la longitud debsi se encuentra y 0 de lo contrario, devuelve el máximo de estos valores.Sería interesante ver una versión más corta.
fuente
Retina , 24 bytes
Pruébalo en línea!
Un calentamiento para mí para aprender las nuevas características de Retina 1.
Explicación
Una etapa de Lista, esto devuelve todas las coincidencias para la expresión regular
(.*).*\1, que coincide con cualquier patrón de la forma "ABA", donde A y B son dos subcadenas arbitrarias (posiblemente vacías). Las opciones adicionales dadas a esta etapa sonv, que considera coincidencias superpuestas, y$que aplica una sustitución a cada una de las coincidencias antes de devolverla: la sustitución se indica en la segunda línea y corresponde a la longitud (.) del primer grupo de captura ( que sería la subcadena "A" en el ejemplo anterior).Ahora tenemos todas las longitudes de subcadenas repetidas, esta etapa simplemente las ordena en orden numérico, desde la más corta hasta la más larga.
Finalmente, esta etapa grep (
G) mantiene solo el último-1resultado ( ), que es la longitud de la subcadena repetida más larga.fuente
Javascript, 165 bytes
Casos de prueba
fuente
ababcabcabcabcab, pero la cadenacabcabse repite.