class Solution:
def compress(self, chars: List[str]) -> int:
l = r = 0
size = len(chars)
cnt = 1
for r in range(1,size+1):
if r < size and chars[r] == chars[r-1]:
cnt += 1
else:
chars[l] = chars[r-1]
l += 1
if cnt > 1:
for x in str(cnt):
chars[l] = x
l += 1
cnt = 1
#chars = chars[:l]
#print(chars)
return l
class Solution:
def compress(self, chars: List[str]) -> int:
l = 0
cnt = 1
n = len(chars)
if n < 2:
return n
for r in range(1,n):
# if current is diff from prev, update cnt
if chars[r] == chars[r-1]:
cnt += 1
else:
#discuss about cnt
l += 1
if cnt > 1:
# add cnt (can be '12'=> '1','2')
for c in str(cnt):
chars[l] = c
l += 1
# left go to new char
chars[l] = chars[r]
cnt = 1
# handle tail part of chars
if cnt != 1:
for c in str(cnt):
l+= 1
chars[l] = c
return l+1 # l is 0-based idx
class Solution:
def compress(self, chars: List[str]) -> int:
wp = rp = 0
n = len(chars)
while rp < n:
chars[wp] = chars[rp]
ch = chars[wp]
cnt = 0
while rp < n and ch == chars[rp]:
rp += 1
cnt += 1
# case1 rp == n
# cnt == 1
chars[wp] = ch
wp += 1
# case2 chars[rp] != ch
if cnt > 1:
for c in str(cnt):
chars[wp] = c
wp += 1
return wp