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?