leetcode

Leetcode Solutions (0x6A73)
git clone https://git.pngu.org/leetcode
Log | Files | Refs | Submodules | README

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);
}