Edit Distance.
Submit solution
Points:
100 (partial)
Time limit:
2.0s
Memory limit:
512M
Author:
Problem type
Allowed languages
Ada, Assembly, Awk, Brain****, C, C#, C++, Dart, Go, Java, JS, Kotlin, Lua, Pascal, Perl, Prolog, Python, Rust, Scala, Swift, VB, Zig
La distancia de edición entre dos cadenas es el número mínimo de operaciones necesarias para transformar una cadena en la otra.
Las operaciones permitidas son:
- Añadir un carácter a la cadena.
- Eliminar un carácter de la cadena.
- Sustituir un carácter de la cadena.
Por ejemplo, la distancia de edición entre las cadena LOVE y MOVIE es , porque primero puedes sustituir
por
, y luego añadir
.
Tu tarea es calcular la distancia de edición entre dos cadenas.
Entrada
La primera línea de entrada tiene una cadena que contiene caracteres entre A-Z.
La segunda línea de entrada tiene una cadena que contiene
caracteres entre A-Z.
Salida
Imprime un entero: la distancia de edición entre las cadenas.
Restricciones
.
Ejemplo de Entrada
LOVE
MOVIE
Ejemplo de Salida
2
Comments
No lo digo por nada pero podrían optar por poner el caso de prueba de acuerdo con el ejemplo; me explico; en el ejemplo del problema utilizan LOVE y MOVIE y en el caso de prueba son las mismas palabras pero en español. Y lo comento porque puede ser confuso para alguien con poca experiencia y poco conocimiento de inglés.
Si, deberían ser las palabras en inglés un error de traducción. Será arreglado pronto. La respuesta al caso de ejemplo se basa en las palabras en inglés
Editorial
Este es un problema clásico llamado edit distance, que mide cuántas operaciones mínimas se necesitan para convertir una cadena a en otra cadena b.
Definimos dp[i][k] como el mínimo número de movimientos para transformar los primeros i caracteres de a en los primeros k caracteres de b.
Opciones para transformar a[i] en b[k] Al calcular dp[i][k], hay cuatro casos posibles según la última operación realizada:
1️⃣ Eliminar el último carácter de a.
Eliminamos a[i-1] Nos queda transformar a[i-1] en b[k] Costo: 1 + dp[i-1][k]
2️⃣ Agregar un carácter al final de a.
Añadimos b[k-1] al final de a[i] Nos queda transformar a[i] en b[k-1] Costo: 1 + dp[i][k-1]
3️⃣ Reemplazar un carácter de a.
Reemplazamos a[i-1] por b[k-1] Nos queda transformar a[i-1] en b[k-1] Costo: 1 + dp[i-1][k-1]
4️⃣ No hacer nada (si los caracteres ya coinciden).
Si a[i-1] == b[k-1], no necesitamos cambiar ese carácter Nos queda transformar a[i-1] en b[k-1] Costo: dp[i-1][k-1] Complejidad del Algoritmo El algoritmo tiene una complejidad de: O(∣a∣⋅∣b∣) Esto significa que el tiempo de ejecución crece proporcionalmente al producto de las longitudes de a y b.
Código de Ejemplo
*Copiar este código es una infracción baneable