Introducción
En este desafío, su tarea es encontrar subsecuencias generalizadas de cadenas. Las subsecuencias no son necesariamente contiguas, y también pueden "envolver" la cadena, pasando su final y comenzando de nuevo desde el principio. Sin embargo, querrás minimizar la cantidad de envolturas.
Más formalmente, deja uy vser dos cuerdas, y k ≥ 0un número entero. Decimos que ues una ksubsecuencia de ajuste de v, si hay índices distintos de ese tipo , y como máximo satisfacen los índices . Esto significa que se puede encontrar en el interior yendo de izquierda a derecha, eligiendo algunos de sus personajes en el camino y envolviéndose en la mayoría de las veces (de manera equivalente, haciendo como máximo barridos ). Tenga en cuenta que no se puede elegir ningún personaje más de una vez, incluso después de un ajuste, y que las subsecuencias de ajuste son exactamente las subsecuencias ordinarias con las que todos estamos familiarizados.i1, i2, ..., ilen(u)u == v[i1] v[i2] ... v[ilen(u)]kijij > ij+1uvkk+1v0
La tarea
Sus entradas son dos cadenas alfanuméricas uy no vacías v, y su salida es el entero más pequeño k, que ues una ksubsecuencia de ajuste de v. Si no kexiste tal , la salida será -1.
Ejemplo
Considere las entradas u := xyzyxzzxyxy v := yxzzazzyxxxyz. Si partimos en busca de los personajes de uen vde una manera codiciosa, vamos a envolver alrededor de 3 veces:
yxzzazzyxxxyz
>─x─────y────z┐
┌─────────────┘
└y───────x────┐
┌─────────────┘
└──zz─────x─y─┐
┌─────────────┘
└──────────x──>
Por lo tanto, la salida correcta es como máximo 3. Observe cómo xse selecciona el carácter más a la izquierda una vez, y luego se ignora en el segundo barrido, ya que no se puede reutilizar. Sin embargo, existe un método más corto con solo 2 envolturas:
yxzzazzyxxxyz
>──────────xyz┐
┌─────────────┘
└yxzz────x────┐
┌─────────────┘
└───────y─x───>
Resulta que una envoltura (es decir, dos barridos) no es suficiente, por lo que la salida correcta es 2.
Reglas y bonos
Puede escribir una función o un programa completo, y también puede cambiar el orden de las entradas si es necesario. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Hay una bonificación de -10% para calcular todos los casos de prueba en menos de 10 segundos en total. Probaré casos poco claros en mi máquina; Mi implementación de referencia en Python toma alrededor de 0.6 segundos. Tengo una computadora portátil de 7 años con una CPU de doble núcleo de 1.86 GHz, que es posible que desee tener en cuenta.
Casos de prueba
"me" "moe" -> 0
"meet" "metro" -> -1
"ababa" "abaab" -> 1
"abaab" "baabaa" -> 1
"1c1C1C2B" "1111CCCcB2" -> 3
"reverse" "reserved" -> 2
"abcdefg" "gfedcba" -> 6
"xyzyxzzxyx" "yxzzazzyxxxyz" -> 2
"aasdffdaasdf" "asdfddasdfsdaafsds" -> 2
xse usa en tres barridos distintos. Solo se puede usar una vez.