string_compression3.c (1049B)
| // 3163. String Compression III
#include "leetcode.h"
/*
* given a string 'word', compress it using the following algorithm: begin with
* an empty string 'comp'. while 'word' is not empty, use the following
* operation: remove a maximum length prefix of 'word' made of a single
* character 'c' repeating at most 9 times. append the length of the prefix
* followed by 'c' to 'comp'. return the string 'comp'
*/
char *compressedString(char *word) {
int n = strlen(word), cnt = 1, idx = 0;
char *comp = (char *)calloc(2 * n + 1, sizeof(char));
for (int i = 0; i < n; i++) {
if (i == n || word[i] != word[i + 1] || cnt == 9) {
comp[idx] = cnt + '0';
idx++;
comp[idx] = word[i];
idx++;
cnt = 1;
} else
cnt++;
}
comp[idx] = '\0';
return comp;
}
int main() {
char *w1 = "abcde", *w2 = "aaaaaaaaaaaaaabb";
char *cs1 = compressedString(w1);
char *cs2 = compressedString(w2);
printf("%s\n", cs1); // expect: 1a1b1c1d1e
printf("%s\n", cs2); // expect: 9a5a2b
free(cs1), free(cs2);
}
|