Creo que la lógica de tu algoritmo funciona. De todos modos, aquí está mi interpretación de lo que describió, a continuación en C ++ y esto funciona en algunas pruebas simples. Solo necesita ser un poco más explícito con los tipos de contenedor que está utilizando. El tipo que infiero que necesita es un std :: multimap para que pueda encontrar rápidamente la posición entera del carácter coincidente en la cadena. Mutlimap es un contenedor asociativo que admite múltiples elementos con la misma clave, ya que a menudo obtienes caracteres repetidos en diferentes posiciones en una cadena.
std :: string max_common_substring (const std :: string & a, const std :: string & b)
{
std :: string max (“”);
// crea un mapa de búsqueda
std :: mapa multimapa ;
for (unsigned int i = 0; i <a.size (); ++ i)
map.insert (std :: make_pair (a [i], i));
// encuentra la subcadena de b en a
for (unsigned int j = 0; j <b.size (); ++ j)
{
std :: multimap :: const_iterator start, end;
auto pair = std :: make_pair (inicio, fin);
par = map.equal_range (b [j]);
for (std :: multimap :: const_iterator it = pair.first; it! = pair.second; ++ it)
{
// almacenar potencial máximo
std :: string temp;
temp.push_back (it-> primero);
// prueba los caracteres restantes
int aindex = it-> segundo;
int bindex = j;
for (unsigned int k = 1; k + bindex <b.size () && k + aindex <a.size (); ++ k)
{
if (b [bindex + k] == a [aindex + k])
temp.push_back (a [aindex + k]);
más
descanso;
}
// almacenar si max encontrado
if (max.size () <temp.size ())
max = temp;
}
}
retorno max;
}
- ¿La recursividad es más rápida que los bucles en MATLAB?
- Cómo implementar este algoritmo usando Matlab
- ¿Cuáles son algunas de las preguntas famosas al calcular los caminos más cortos (gráficos) usando Dijkstra's, DAG y Bellman-Ford?
- ¿Cómo funciona el algoritmo de búsqueda de ciclo de Floyd? ¿De qué manera mover la tortuga al comienzo de la lista vinculada, mientras se mantiene a la liebre en el lugar de reunión, seguido de mover un paso a la vez, hace que se encuentren en el punto de inicio del ciclo?
- Cómo implementar este problema: Problema - C - Fuerzas de código