# 443. String Compression

• Time: $O(n)$
• Space: $O(1)$
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Solution { public: int compress(vector& chars) { int ans = 0; for (int i = 0; i < chars.size();) { const char letter = chars[i]; int count = 0; while (i < chars.size() && chars[i] == letter) { ++count; ++i; } chars[ans++] = letter; if (count > 1) for (const char c : to_string(count)) chars[ans++] = c; } return ans; } }; 
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { public int compress(char[] chars) { int ans = 0; for (int i = 0; i < chars.length;) { final char letter = chars[i]; int count = 0; while (i < chars.length && chars[i] == letter) { ++count; ++i; } chars[ans++] = letter; if (count > 1) for (final char c : String.valueOf(count).toCharArray()) chars[ans++] = c; } return ans; } } 
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Solution: def compress(self, chars: List[str]) -> int: ans = 0 i = 0 while i < len(chars): letter = chars[i] count = 0 while i < len(chars) and chars[i] == letter: count += 1 i += 1 chars[ans] = letter ans += 1 if count > 1: for c in str(count): chars[ans] = c ans += 1 return ans