ForHosting KIT · Texto e IA

Calculadora LCS

Encuentre la secuencia de caracteres más larga que dos cadenas comparten en el mismo orden, aunque haya huecos: ABCBDAB y BDCABA comparten 4, por ejemplo BCBA. Obtiene la longitud y una subsecuencia válida que puede comprobar a simple vista. Gratis en su navegador.

  • Gratis
  • Funciona en su navegador
  • Sin registro
  • Sus datos no salen de su equipo
Úselo desde WebAPIEmailTelegramApp pronto
Si escribe
Cadena A
ABCBDAB
Cadena B
BDCABA
Obtiene
Len a
7
Len b
6
Longitud
4
Subsecuencia
BCBA

El problema de la subsecuencia común más larga pide la secuencia de caracteres más larga que aparece en el mismo orden dentro de dos cadenas de entrada, sin exigir contigüidad. Es la base de programación dinámica de las herramientas de diff por líneas, ayudas de fusión en control de versiones, detectores de plagio que toleran reordenaciones ruidosas y la comparación de secuencias biológicas cuando las inserciones y eliminaciones importan más que un substring exacto. Esta calculadora de subsecuencia común más larga acepta dos cadenas, rellena una tabla clásica de longitudes en tiempo lineal respecto al producto de las longitudes, reconstruye un LCS válido por retroceso y devuelve tanto la longitud numérica como la cadena de la subsecuencia. Las entradas vacías son válidas y dan longitud cero.

Qué es (y qué no es) una subsecuencia común más larga

Una subsecuencia de una cadena es cualquier cadena obtenida al borrar cero o más caracteres sin reordenar los que quedan. Una subsecuencia común de dos cadenas es una cadena que es subsecuencia de ambas. Una subsecuencia común más larga, o LCS, es cualquier subsecuencia común cuya longitud es máxima entre todas las subsecuencias comunes.

A diferencia de un substring común más largo, un LCS no necesita ocupar un bloque contiguo en ninguna de las entradas: el par clásico ABCBDAB y BDCABA admite varias cadenas LCS de longitud cuatro, como BCBA y BDAB, según qué empates elija la reconstrucción. Los algoritmos de diff y las herramientas de alineamiento de DNA se basan en esta noción no contigua porque las ediciones reales insertan y eliminan símbolos en lugar de solo deslizar una ventana fija.

La longitud de un LCS es una puntuación de similitud útil; los caracteres reconstruidos sirven cuando usted quiere un esqueleto de alineamiento explícito junto a la puntuación. No devuelve todos los LCS posibles, scripts de edición ni porcentajes de similitud: esos son problemas distintos construidos sobre la misma idea de tabla DP.

Dónde resulta útil la subsecuencia común

Los cursos de informática y los jueces en línea necesitan un oráculo de referencia que devuelva una longitud correcta y una subsecuencia válida para cadenas cortas arbitrarias sin que el alumnado pegue soluciones en un IDE completo. Las funciones de producto cercanas al diff—resúmenes de cambios, pistas de conflicto de fusión, alineación de líneas de log—suelen querer la longitud LCS como señal barata de similitud antes de un pase más pesado de distancia de edición.

Las demos docentes de bioinformática usan cadenas del alfabeto DNA de juguete (A, C, G, T) para mostrar cómo inserciones y eliminaciones dejan aun así un esqueleto compartido largo. Mantenga las cadenas bajo el tope de longitud, fije la subsecuencia reconstruida en las pruebas si le importa cuál de varias respuestas igual de largas obtiene, y tendrá resultados LCS reproducibles sin montar una biblioteca numérica propia.

Deberes de algoritmos y demos de clase

Entregue a sus alumnos dos cadenas cortas y verifique tanto la longitud LCS como que la subsecuencia devuelta aparece de verdad en orden en cada entrada.

Calificación automática en LMS y concursos

Califique tareas de DP con un oráculo determinista que rechaza entrada inválida y nunca inventa una subsecuencia más larga de lo que permite la tabla clásica.

Previas de diff y similitud de secuencias

Puntúe la estructura ordenada compartida entre dos textos o cadenas DNA de juguete antes de un pipeline más pesado de distancia de edición o alineamiento.

¿Es LCS lo mismo que el substring común más largo?

No. Un substring debe ser contiguo; una subsecuencia puede saltar caracteres. Esta calculadora resuelve el problema de subsecuencia con programación dinámica clásica.

¿Cuáles son los límites de longitud y las reglas de cadena vacía?

Cada cadena puede tener como máximo 500 caracteres. Las cadenas vacías se permiten y producen length 0 con subsecuencia vacía.

¿Por qué dos cadenas pueden tener varias subsecuencias comunes más largas?

Porque los empates son frecuentes. ABCBDAB y BDCABA comparten varias de longitud 4, como BCBA y BDAB. La calculadora devuelve una y resuelve los empates siempre igual, así que un mismo par da siempre la misma respuesta.

¿Para qué sirve la longitud de la LCS?

Funciona como una medida de parecido barata. Resúmenes de cambios, ayudas para fusiones y alineación de registros pueden usarla antes de un cálculo de distancia más pesado, y las demostraciones con letras de ADN muestran cómo sobrevive un tramo común largo.

¿Cómo compruebo que la subsecuencia devuelta es correcta?

Verifique que sus caracteres aparecen en el mismo orden en ambas cadenas, saltando los demás, y que su longitud coincide con la indicada. BCBA cumple en ABCBDAB y en BDCABA, que es justo como se corrigen las respuestas.

Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.

POSThttps://api.kit.forhosting.com/dev/longest-common-subsequence

¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.

curl -X POST https://api.kit.forhosting.com/dev/longest-common-subsequence \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"string_a":"ABCBDAB","string_b":"BDCABA"}'
{
  "string_a": "ABCBDAB",
  "string_b": "BDCABA"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "dev.longest_common_subsequence",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.

Por solicitud$0.002

Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.

HTTPCódigoSignificado
401unauthorizedAPI key ausente o inválida.
402insufficient_balanceEl saldo no cubre el precio de la tarea.
404unknown_typeEl tipo de tarea no existe.
429rate_limitedDemasiadas peticiones. Use el webhook en vez de sondear.

Contrato de entrada, algoritmo, forma de la respuesta y límites

La complejidad es O(m·n) en tiempo y O(m·n) en memoria en la forma de tabla ingenua usada aquí: adecuada al tope de longitud, deliberadamente simple para docencia y goldens deterministas. Envíe por POST un cuerpo JSON con dos campos de cadena obligatorios: string_a y string_b (se aceptan los alias a, s1, first, text_a y b, s2, second, text_b). Ambas pueden estar vacías; ambas deben ser cadenas JSON verdaderas, no números ni arrays. Campos ausentes, tipos no cadena y entradas demasiado largas fallan con invalid_input y no se facturan. En caso de éxito el cuerpo repite string_a y string_b, informa len_a y len_b e incluye length (la longitud LCS) más subsequence (una cadena LCS, posiblemente vacía). Internamente el solucionador asigna una tabla de enteros (m+1) por (n+1), pone dp[i][j] en dp[i-1][j-1]+1 cuando los prefijos coinciden en el último carácter, si no el máximo de las celdas superior e izquierda, y luego recorre desde la esquina inferior derecha: un par coincidente añade ese carácter y avanza en diagonal; en empate prefiere subir (descartar de string_a) para que la instancia reconstruida sea estable entre runtimes.

Dónde una API de LCS aporta valor real

Los calificadores automáticos de LMS pueden llamar a la API con pares fijos y afirmar tanto la longitud como que la subsecuencia devuelta es subsecuencia de cada entrada, capturando errores de tabla de uno que solo fallan en casos vacíos o de un solo carácter. Como la implementación es parse pura de nivel A, cada llamada exitosa cuesta el precio base publicado $0.002 sin tokens de modelo ni red saliente.

¿Cómo calculo la subsecuencia común más larga de dos cadenas?

Envíe string_a y string_b como cadenas JSON. La API devuelve length (longitud LCS) y subsequence (una subsecuencia común maximal), además de las entradas repetidas y sus longitudes.

¿Qué LCS se devuelve cuando existen varios?

Cualquier LCS de longitud maximal es correcto. Esta implementación usa un retroceso fijo (preferir descartar de string_a en empates) para que las mismas entradas den siempre la misma cadena de subsecuencia.

¿Cuánto cuesta la calculadora de subsecuencia común más larga?

La herramienta del navegador es gratis. Las solicitudes API usan saldo prepago KIT a $0.002 por llamada exitosa; la entrada inválida no se factura.

Ver la documentación completa del KIT →