1143. Autorreflexión de la subsecuencia común más larga para programación dinámica

Hoy vi una oración, la cuestión de los algoritmos, en primer lugar, para ordenar las ideas, no los algoritmos o las ecuaciones, sino la presentación de mis ideas al estilo de código antes de escribir el código. Resumamos la planificación dinámica hoy. Este aspecto siempre ha sido nuestra propia debilidad. Si se dice que es débil, es mejor decir que las preguntas no coinciden con las ideas. Muchas de las planificaciones dinámicas hechas directamente por usted son obvias, pero el pensamiento no es particularmente claro. La subcadena más grande, cuál es el mayor problema de subsecuencia, la pregunta de subsecuencia más grande se enumera a continuación:

Primero asegúrese de que esta pregunta sea un tipo de pregunta de programación dinámica, marcamos iyj en cualquier posición, i es la posición de marca del texto1, j es la posición de marca del texto2, si los caracteres en las posiciones de iyj son iguales, entonces dp [i ] ¿A qué equivale [j]? ¿Es igual a dp [i-1] [j] o dp [i] [j-1]? Eso es:

(1) Si el último bit de S es igual al último bit de T, la subsecuencia máxima es el máximo de {s1, s2, s3 ... si-1} y {t1, t2, t3 ... tj-1} Subsecuencia + 1

(2) Si el último bit de S no es igual al último bit de T, entonces la subsecuencia máxima es

Subseque {s1, s2, s3..si} y {t1, t2, t3 ... tj-1} subsecuencia máxima

② {s1, s2, s3 ... si-1} y {t1, t2, t3 .... tj} subsecuencia máxima

El valor máximo de las dos auto-secuencias anteriores.

Se ha generado la ecuación dinámica, luego publicamos el código de la siguiente manera:

    public int longestCommonSubsequence(String text1, String text2) {
        int n1 = text1.length(), n2 = text2.length();
        int[][] dp = new int[n1 + 1][n2 + 1];
        for (int i = 1; i <= n1; i++) {
            for (int j = 1; j <= n2; j++) {
                if (text1.charAt(i - 1) == text2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }
        return dp[n1][n2];
    }

 

17 artículos originales publicados · Me gusta0 · Visitas 154

Supongo que te gusta

Origin blog.csdn.net/qq_33286699/article/details/105013284
Recomendado
Clasificación