1
class Solution {
2
public:
3
void add1(vector<int> &arr) {
4
if (arr.back() < 9) {
5
arr.back()++;
6
return;
7
}
8

9
reverse(begin(arr), end(arr));
10
int carry = 1;
11

12
for (int i = 0; i < arr.size(); i++) {
13
if (arr[i] < 9) {
14
arr[i]++;
15
carry = 0;
16
break;
17
}
18

19
arr[i] = 0;
20
carry = 1;
21
}
22

23
if (carry == 1) arr.push_back(1);
24
reverse(begin(arr), end(arr));
25
}
26

27
int compress(vector<char> &chars) {
28
int i = 0;
29
for (int j = 0; j < chars.size(); j++) {
30
if (j == chars.size() - 1 or chars[j] != chars[j + 1]) {
31
chars[i++] = chars[j];
32
}
33

34
else {
35
vector<int> cnt{0};
36
char ch = chars[j];
37
while (j < chars.size() and chars[j] == ch) {
38
j++;
39
add1(cnt);
40
}
41

42
j--; // bcoz j will be incremented in for loop updation condition.
43
chars[i++] = ch;
44

45
for (auto &it : cnt) chars[i++] = '0' + it;
46
}
47
}
48
chars.erase(chars.begin() + i, chars.end());
49
return i;
50
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0