compresión cadena leetcode- preguntas cara 01.06

la compresión de cuerdas. Utilizando el número de caracteres que se repiten, escrito en una manera de lograr la compresión básica cadena. Por ejemplo, la cadena se convierte en aabcccccaaa a2b1c5a3. Si la cadena "comprimido" no son más cortos, se devuelve la cadena original. Usted puede asumir la cadena contiene sólo las letras mayúsculas (A a Z).

pensamiento

Son iguales antes y después se determina el puntero doble, igual número más uno. Los detalles de cómo que existe después de la nueva cadena de caracteres en el número de caracteres, cómo las variables int en una cadena que aquí no utilizar funciones de biblioteca itoa, por lo que podemos determinar en primer lugar el número de dígitos enteros, y cada personaje se almacena en orden inverso, por + '0' de esta manera las unidades entero en la forma del carácter, y se almacena entonces en una matriz de caracteres. Es importante tener en cuenta los tipos básicos de desbordamiento, si el número de caracteres repetidos es demasiado grande, puede haber desbordamiento de plástico, pero el problema no más de 5w caracteres se da, por lo que este problema no existe. Pero creo que antes de que el uso directo de tipo char para definir el recuento, que se define como un '1' en esta forma, no era ningún cambio, lo que resulta en un caso de prueba no ha pasado, pero más tarde se descubrió, los desbordamientos de tipo char, se produjo un error de memoria.

char* compressString(char* s){
    int len=strlen(s);
    char* new_s=(char*) malloc(sizeof(char)* (len*2+1));
    if(*s=='\0') return "";
    char ch=s[0];
    int index=0;
    int count=1;	//这里,之前用的char count=1; 导致有一个case一直不通过
    for(int i=1;i<=len;i++){		
        if(ch==s[i]){			//之前指针与当前指针比较,灵活运用for循环
            count++;
        }
        else{
            new_s[index++]=ch;
            int num=(int) log10(count),num1=num;		//计算位数,倒序存入数组
            while(count){
                new_s[index+num]=count%10+'0';
                count/=10;
                num--;
            }
            index+=num1+1;
            count=1;
            ch=s[i];
        }
    }
    new_s[index]='\0';
    if(len>index){
         return new_s;
    }
    return s;
}
Se han publicado 19 artículos originales · ganado elogios 1 · vistas 3124

Supongo que te gusta

Origin blog.csdn.net/qq_41603639/article/details/104897024
Recomendado
Clasificación