1143. La subsecuencia común más larga (mediana)

Ideas:

Ecuación de transición de estado:

Usando doble recorrido, si el carácter del subíndice i del texto1 es el mismo que el carácter del subíndice j del texto2, entonces dp [i] [j] = dp [i-1] [j-1] +1 se basa en el valor anterior Sume 1

Si no son iguales, tome el caso en el que texto1 y texto2 tienen las subsecuencias más comunes dp [i] [j] = Math.max (dp [i-1] [j], dp [i] [j-1] )

 

Código:

class Solution {
    public int longestCommonSubsequence(String text1, String text2) {
		int m=text1.length();
		int n=text2.length();
		int[][] dp=new int[m+1][n+1];
		
		//初始化0行、0列,表示text1与空字符串text1	or	text2与空字符串text1比较返回0
		for(int i=0;i<=m;i++){
			dp[i][0]=0;
		}
		for(int i=0;i<=n;i++){
			dp[0][i]=0;
		}
		
		//从1开始遍历,
		for(int i=0;i<m;i++){
			for(int j=0;j<n;j++){
				if(text1.charAt(i)==text2.charAt(j)){
					dp[i+1][j+1]=dp[i][j]+1;
				}else{
					dp[i+1][j+1]=Math.max(dp[i][j+1],dp[i+1][j]);
				}
			}
		}
		
		return dp[m][n];

	}
}

 

descomponer:

1) Debido a problemas de límites:

    i) La fila 0 y la columna 0 representan 0 caracteres, por lo que todas las filas y columnas 0 deben establecerse en 0 durante la inicialización.

    ii) Uno más al declarar dp, dp [m + 1] [n + 1]

    iii) Al inicializar, la condición de límite es llegar a myn, i <= m, i <= n

    iiii) Al atravesar, comience desde 0, porque text1.charAt (1) representa el segundo carácter de la cadena. Y dp [1] [1] significa que el primer carácter de text1 se compara con el segundo carácter de text2

    iiiii) Devuelve el resultado dp [m] [n] en lugar de dp [m-1] [n-1]

 

2) Aquí dp es la segunda forma, el valor actual depende de todos los valores calculados previamente

¿Es la planificación de intervalos?

Supongo que te gusta

Origin blog.csdn.net/di_ko/article/details/115262012
Recomendado
Clasificación