-
Notifications
You must be signed in to change notification settings - Fork 1
/
LeetCode_443_Easy.ts
31 lines (25 loc) · 985 Bytes
/
LeetCode_443_Easy.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Compressing the string in place using the run-length encoding technique.
function compress(chars: string[]): number {
// Returning as it is, since it cannot be done.
if (chars.length <= 1) {
return chars.length;
}
// Using 3 pointers: read, write and anchor.
let write = 0, anchor = 0;
// Moving the read pointer continuously for O(n) operation.
chars.forEach((char, read) => {
// Checking boundary conditions for writing where the contiguous array is stopped.
if (read + 1 === chars.length || chars[read+1] != char) {
const count = read - anchor + 1
chars[write++] = char;
if (count > 1) {
for (const digit of count.toString()) {
chars[write++] = digit;
}
}
// Updating anchor for next consequitive group reading.
anchor = read + 1;
}
})
return write;
};