Categorías
Algorithms

Subcadena común más larga (Java)

En ciencias de la computación, el problema común de subcadenas más largo es encontrar la cadena más larga que es una subcadena de dos o más cadenas.

Análisis

Dadas dos cadenas ayb, sea dp[i][j] ser la longitud de la subcadena común que termina en un[i] y B[j].

La tabla dp tiene el siguiente aspecto dado a = «abc» yb = «abcd».

más largo-común-subcadena-java

Solución Java

public static int getLongestCommonSubstring(String a, String b){
	int m = a.length();
	int n = b.length();
 
	int max = 0;
 
	int[][] dp = new int[m][n];
 
	for(int i=0; i<m; i++){
		for(int j=0; j<n; j++){
			if(a.charAt(i) == b.charAt(j)){
				if(i==0 || j==0){
					dp[i][j]=1;
				}else{
					dp[i][j] = dp[i-1][j-1]+1;
				}
 
				if(max < dp[i][j])
					max = dp[i][j];
			}
 
		}
	}
 
	return max;
}

Este es un problema similar al de la subsecuencia común más larga. La diferencia de la solución es que para este problema cuando un[i]! = b[j], dp[i][j] son todos ceros por defecto. Sin embargo, en el problema de subsecuencia común más largo, dp[i][j] los valores se llevan de los valores anteriores, es decir, dp[i-1][j] y dp[i][j-1].

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *