程式語言 - LeetCode - C - 394. Decode String



參考資訊:
https://www.cnblogs.com/grandyang/p/5849037.html

題目:


解答:

char* decodeString(char* s)
{
    #define S_MAX_SIZE (300 * 30)

    int v = 0;
    int c0 = 0;
    int c1 = 0;
    int r_idx = 0;
    int num_idx = 0;
    int buf_idx = 0;
    int num[30] = { 0 };
    int len = strlen(s);
    char *r = NULL;
    char buf[30][S_MAX_SIZE] = { 0 };

    r = malloc(S_MAX_SIZE);
    memset(r, 0, S_MAX_SIZE);

    for (c0 = 0; c0 < len; c0++) {
        if (isdigit(s[c0])) {
            v = (10 * v) + (s[c0] - '0');
            continue;
        }

        switch (s[c0]) {
        case '[':
            num[num_idx++] = v;
            strcat(buf[buf_idx++], r);

            v = 0;
            r_idx = 0;
            memset(r, 0, S_MAX_SIZE);
            break;
        case ']':
            int n = num_idx - 1;
            int b = buf_idx - 1;

            for (c1 = 0; c1 < num[n]; c1++) {
                strcat(buf[b], r);
            }
            strcpy(r, buf[b]);
            buf[b][0] = 0;

            r_idx = strlen(r);
            num_idx -= 1;
            buf_idx -= 1;
            break;
        default:
            r[r_idx++] = s[c0];
            break;
        }
    }

    return r;
}