Problema de distancia de edición de programación dinámica de LeetCode - 583. Operación de eliminación de dos cadenas

Descripción del Título:

583. Eliminación de dos cadenas

Dadas dos palabras  word1 sum  word2 , devuelve  el número mínimo de pasos necesarios para que la suma sea word1 la   misma .word2 

Cada paso  puede eliminar un carácter en cualquier cadena.

 

analizar:

Tenga en cuenta los cinco pasos de la programación dinámica:

1. Determinar el significado de la matriz dp

2. Determinar la fórmula recursiva

3. inicialización de la matriz dp

4. Determinar el orden de recorrido

01 problema de mochila: recorrido de dp unidimensional, el producto se coloca en el bucle exterior, la mochila está en el bucle interior y el bucle interior está en orden inverso.

Buscando combinaciones: recorrer primero los productos y luego recorrer la mochila

Arreglo de búsqueda: primero facilite la mochila y luego atraviese los productos

Encuentre el máximo y el mínimo: no hay ningún requisito para el orden transversal

5. Enumeración y derivación

código:

class Solution {
    public int minDistance(String word1, String word2) {
        int len1=word1.length();
        int len2=word2.length();
        //dp[i][j]:使得s[i-1]和s[j-1]相同的最小步数
        int[][] dp=new int[len1+1][len2+1];
        for(int i=0;i<=len1;i++) dp[i][0]=i;
        for(int j=0;j<=len2;j++) dp[0][j]=j;

        for(int i=1;i<=len1;i++){
            char c1=word1.charAt(i-1);
            for(int j=1;j<=len2;j++){
                char c2=word2.charAt(j-1);
                if(c1==c2){
                    dp[i][j]=dp[i-1][j-1];
                }else{
                    /*如果最后一个字符不同,可以有三种操作:
                    1.把两个字符都删掉。操作次数+2
                    2.把word1的字符删掉或把word2的字符删掉,操作次数+1
                    */
                    dp[i][j]=Math.min(dp[i-1][j-1]+2,Math.min(dp[i-1][j]+1,dp[i][j-1]+1));
                }
            }
        }
        return dp[len1][len2];
    }
}

Método de programación dinámica para resolver el problema:

Al hacer el problema de la regla de movimiento, muchos estudiantes caerán en un malentendido, es decir, piensan que memorizan la fórmula de transición de estado, la cambian de acuerdo con el dibujo de la calabaza y luego comienzan a escribir el código. Este es un tipo de estado confuso, y luego pasa las preguntas, y si encuentra algunas un poco más difíciles, es posible que no pueda hacerlo de inmediato, y luego busca la solución de las preguntas y luego continúa. sigue la calabaza para caer en este círculo vicioso. ¡Determinar la fórmula recursiva es solo un paso para resolver problemas de programación dinámica! Conozco la fórmula recursiva, pero no sé cómo inicializar la matriz dp y cómo atravesar la matriz correctamente

Por eso, siempre tenemos en cuenta los cinco pasos de la programación dinámica:

1. Determinar el significado de la matriz dp

2. Determinar la fórmula recursiva

3. inicialización de la matriz dp

4. Determinar el orden de recorrido

5. Ejemplo de derivación

Antes de hacer la pregunta, puedes pensar en estas tres preguntas por ti mismo:

  • ¿Dé un ejemplo para derivar la fórmula de transición de estado para esta pregunta?
  • ¿Di un ejemplo para derivar la matriz dp?
  • ¿La matriz dp impresa es la misma que pensé?

Siga al blogger para resolver el problema en la secuencia de seguimiento, y todos sentirán gradualmente la importancia de estos cinco pasos.

El bloguero continuará actualizando las soluciones de problemas de LeetCode y las preguntas del proceso de aprendizaje de Java (todas están clasificadas según el tipo de pregunta~), si te resulta útil, dale a Me gusta al bloguero, ¡síguelo y crezcamos juntos!

Supongo que te gusta

Origin blog.csdn.net/w20001118/article/details/126913649
Recomendado
Clasificación