Pregunta sobre programación de Microsoft C++ que busca código fuente y comentarios
/*
Un collar de cuentas (m? piezas) conectadas de extremo a extremo, con ?N colores (N<=10),
Diseño a El algoritmo toma uno de los segmentos y requiere que contenga todos los colores en N y que la longitud sea la más corta.
*/
#include?
#include?
#include?< string.h>
int?shortestlengh(char?*?in,?char?**?dst,?int?N)
{
/ /Cambiar a la forma de inin para evitar el resto
int?nlen?=?strlen(in);
char?*?in2?=?(char?*)malloc( 2?*?nlen?*?sizeof(char));?
memcpy(in2,?in,?nlen?*?sizeof(char));
memcpy(in2 ?+?nlen,?in,?nlen?*?sizeof(char));
int?start?=?0,?end?=?nlen?-?1;
int?shortestlen?=?nlen;
int?hash[256]?=?{0};
int?colornum?=?0;
int?s?=?0,?e?=?-1;
//Recorre todos los puntos de partida posibles
while(s?
{
while(colornum?
{
e++;
if(hash[int(in2[e])]?==?0)
{
colornum++;
}
hash[int(in2[e])]++;
}
/ /Eliminar la misma parte que antes
while(in2[s]?==?in2[s?+?1])
{
s++;
hash[(int)in2[s]]--;
}
//Actualiza la cadena más corta
if( shortlen ?>?e?-?s?+?1)
{
shortestlen?=?e?-?s?+?1;
start ?=?s;
end?=?e;
}
//Actualizar s, comenzando desde el siguiente color
hash[(int)in2[s]]--;
if(hash[(int)in2[s]]?==?0)
{
colornum--;
}
s?=?s?+?1;
}
*( dst )?=?(char?*)malloc(end?-?start?+?2);
memcpy(*dst,?in2?+?start,?end?-?start?+ ? 1);
(*dst)[end?-?start?+?1]?=?'\0';?//Nota
free(in2);
retorno?end?-?start?+?1;
}
int?main()
{
char?*?s?=?"addcddcbccbba";
char?*?d?=?NULL;
int?n?=?shortestlengh(s, ? &d,?4);
printf("%d\n%s\n",?n,?d);
p>
regresar?0;
}