less than 1 minute read

Problem Statement

leetcode problem link

Brute Force [Accepted]

class Solution:
    def compress(self, chars: List[str]) -> int:
        l, r, k = 0, 0, 0
        N = len(chars)
        for r in range(N):
            if chars[r] != chars[l]:
                chars[k] = chars[l]
                k += 1
                length = r - l
                if length >= 10:
                    for c in str(length):
                        chars[k] = c
                        k += 1
                elif length > 1:
                    chars[k] = str(length)
                    k += 1
                l = r
            if r == N - 1:
                chars[k] = chars[l]
                k += 1
                length = r - l + 1
                if length >= 10:
                    for c in str(length):
                        chars[k] = c
                        k += 1
                elif length > 1:
                    chars[k] = str(length)
                    k += 1
        return k

Editorial

class Solution:
    def compress(self, chars: List[str]) -> int:
        i = 0
        res = 0
        while i < len(chars):
            group_length = 1
            while (i + group_length < len(chars)
                   and chars[i + group_length] == chars[i]):
                group_length += 1
            chars[res] = chars[i]
            res += 1
            if group_length > 1:
                str_repr = str(group_length)
                chars[res:res+len(str_repr)] = list(str_repr)
                res += len(str_repr)
            i += group_length
        return res