Cómo encontrar la menor supercadena de 2 subcadenas

Tu pregunta es interesante. Intenté una respuesta pero me dio un error de tiempo de ejecución. Compartiré el código contigo. Si obtengo una solución a mi error, la actualizaré aquí y le informaré de antemano;

Mi código:

#include
#include
usando el espacio de nombres estándar;

Nodo de estructura {
información de cadena;
Nodo * siguiente;
Nodo * anterior;
} * primero, * trasero, * guardar;

void create_node (cadena a) {
Nodo * newptr = nuevo nodo;
newptr-> info = a;
newptr-> next = NULL;
newptr-> prev = NULL;
if (primero == NULL) {
primero = newptr;
trasero = newptr;
}
más{
guardar = trasero;
trasero = newptr;
guardar-> siguiente = trasero;
trasero-> prev = guardar;
}
}

vacío pop (Nodo * ptr) {
Nodo * helptr;
guardar = ptr;
helptr = ptr-> prev;
helptr-> next = ptr-> next;
ptr = ptr-> siguiente;
ptr-> prev = helptr;

borrar guardar;
}

pantalla vacía () {
guardar = primero;

while (save! = NULL) {
cout < información << "";
guardar = guardar-> siguiente;
}

}

nulo eliminadouplicado () {
guardar = primero;
Nodo * ptr;
while (save! = NULL) {
ptr = guardar-> siguiente;
while (ptr! = NULL) {
if (ptr-> info == guardar-> info)
pop (ptr);
ptr = ptr-> siguiente;
}
guardar = guardar-> siguiente;
}
}

int main () {

cuerda a, b;
cin >> a;
cout << "2";

cin >> b;

int i, k = 0;

while (a [i]! = ‘\ 0’) {
char * passingstring = new char [50];
k = 0;
while ((a [i]! = ”) && (a [i]! = ‘\ 0’)) {
cadena de paso [k] = a [i];
++ k;
++ i;
}
cadena de paso [k] = ‘\ 0’;
create_node (cadena de paso);
eliminar la cadena de paso;
++ i;
}

i = 0;
while (b [i]! = ‘\ 0’) {
char * passingstring = new char [50];
k = 0;
while ((b [i]! = ”) && (b [i]! = ‘\ 0’)) {
cadena de paso [k] = b [i];
++ k;
++ i;
}
cadena de paso [k] = ‘\ 0’;
create_node (cadena de paso);
eliminar la cadena de paso;

++ i;
}

eliminadouplicar ();

monitor();

devuelve 0;
}