Subsecuencia común más larga
Alinee dos cadenas con una tabla de DP
Subsecuencia común más larga es una lección gratuita de Competitive Programming Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Competitive Programming Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Competitive Programming Academy incluye 4 lecciones en total.
Qué es una subsecuencia
Una subsecuencia conserva los caracteres en orden, pero puede omitir algunos. De 'abcde' puede obtener 'ace', pero nunca 'aec'.
El objetivo de LCS
Dadas dos cadenas, la subsecuencia común más larga es la secuencia más larga que aparece en ambas y mantiene el mismo orden relativo.
Páselo a una cuadrícula
Compare los prefijos de las dos cadenas. Una tabla bidimensional basada en sus longitudes convierte esto en una DP de cuadrícula conocida.
Defina el estado
Sea dp[i][j] la longitud de la LCS de los primeros i caracteres de A y los primeros j caracteres de B.
Cuando coinciden los caracteres
Si A[i-1] es igual a B[j-1], esa letra compartida amplía la LCS. Sume uno al valor diagonal dp[i-1][j-1].
if a[i-1] == b[j-1]:
dp[i][j] = dp[i-1][j-1] + 1Cuando son diferentes
Si las letras son diferentes, elimine un carácter de cualquiera de las dos cadenas y conserve el mejor resultado. Tome el máximo de los dos vecinos.
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])El caso base
Un prefijo vacío no comparte nada, así que la longitud de la LCS es cero. La fila 0 y la columna 0 permanecen llenas de ceros.
dp = [[0] * (m+1) for _ in range(n+1)]Una fila y una columna adicionales
Dimensionar la tabla como n+1 por m+1 proporciona un borde de ceros gratuito. Así se eliminan las comprobaciones de límites en los extremos.
Rellénela
Recorra i y j empezando desde 1. Cada celda solo necesita los valores de arriba, de la izquierda y de la diagonal, que ya están calculados.
for i in range(1, n+1):
for j in range(1, m+1):
...Lea la longitud
La longitud completa de la LCS se encuentra en la esquina. La respuesta es dp[n][m] una vez rellenadas todas las celdas.
length = dp[n][m]Complejidad
Visita cada celda una vez, por lo que el trabajo requiere tiempo y memoria O(n por m). Esto permite trabajar cómodamente con cadenas de hasta unos pocos miles de caracteres.
Comprobación rápida
Los caracteres actuales A[i-1] y B[j-1] son iguales. ¿Qué actualización es correcta?
Repaso: LCS
Construya una tabla de n+1 por m+1: cuando haya coincidencia, sume uno a la diagonal; de lo contrario, tome el máximo de los vecinos. La esquina contiene la longitud. 🔗
Preguntas frecuentes
¿La lección «Subsecuencia común más larga» es gratis?
Sí — el texto completo de «Subsecuencia común más larga» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Competitive Programming Academy, actualiza a CoddyKit PRO. El curso de Competitive Programming Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Subsecuencia común más larga»?
Alinee dos cadenas con una tabla de DP Practicas Competitive Programming Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Competitive Programming Academy?
No se requiere experiencia previa. Competitive Programming Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Subsecuencia común más larga»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Competitive Programming Academy?
Sí. Cada lección de Competitive Programming Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conteo de caminos en una cuadrícula
- Suma mínima de caminos con obstáculos
- Subsecuencia común más larga
- Distancia de edición paso a paso