程式語言 - LeetCode - C - 443. String Compression



題目:


解答:

int compress(char* chars, int charsSize)
{
    int cc = 0;
    int len = 0;
    char ch = 0;
    char *r = NULL;
    char buf[32] = { 0 };

    if (charsSize == 1) {
        return 1;
    }

    r = malloc(2000 * 2);
    r[0] = 0;

    len = 1;
    ch = chars[0];
    for (cc = 1; cc < charsSize; cc++) {
        if (ch == (char)chars[cc]) {
            len += 1;
        }
        else {
            sprintf(buf, (len == 1) ? "%c" : "%c%d", ch, len);
            strcat(r, buf);

            len = 1;
            ch = chars[cc];
        }
    }

    sprintf(buf, (len == 1) ? "%c" : "%c%d", ch, len);
    strcat(r, buf);

#if 1
    len = strlen(r);
    for (cc = 0; cc < len; cc++) {
        chars[cc] = r[cc];
    }
    return len;
#else
    strcpy(chars, r);
    return strlen(chars);
#endif
}