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



題目:


解答:

int compress(char* chars, int charsSize)
{
    int i = 0;
    int cnt = 1;
    char ch = chars[0];
    char tmp[32] = { 0 };
    char *buf = calloc(2000, 1);

    for (i = 1; i < charsSize; i++) {
        if (ch == (char)chars[i]) {
            cnt += 1;
            continue;
        }

        sprintf(tmp, cnt > 1 ? "%c%d" : "%c", ch, cnt, ch);
        strcat(buf, tmp);

        cnt = 1;
        ch = chars[i];
    }

    sprintf(tmp, cnt > 1 ? "%c%d" : "%c", ch, cnt, ch);
    strcat(buf, tmp);

    cnt = strlen(buf);
    memmove(chars, buf, cnt);

    return cnt;
}