String Compression 3
MediumUpdated: Aug 2, 2025
Practice on:
Problem
Given a string word, compress it using the following algorithm:
- Begin with an empty string
comp. Whilewordis not empty, use the following operation:- Remove a maximum length prefix of
wordmade of a single charactercrepeating at most 9 times. - Append the length of the prefix followed by
ctocomp.
- Remove a maximum length prefix of
Return the string comp.
Examples
Example 1:
Input: word = "abcde"
Output: "1a1b1c1d1e"
Explanation:
Initially, `comp = ""`. Apply the operation 5 times, choosing `"a"`, `"b"`, `"c"`, `"d"`, and `"e"` as the prefix in each operation.
For each prefix, append `"1"` followed by the character to `comp`.
Example 2:
Input: word = "aaaaaaaaaaaaaabb"
Output: "9a5a2b"
Explanation:
Initially, `comp = ""`. Apply the operation 3 times, choosing `"aaaaaaaaa"`, `"aaaaa"`, and `"bb"` as the prefix in each operation.
- For prefix `"aaaaaaaaa"`, append `"9"` followed by `"a"` to `comp`.
- For prefix `"aaaaa"`, append `"5"` followed by `"a"` to `comp`.
- For prefix `"bb"`, append `"2"` followed by `"b"` to `comp`.
Solution
Method 1 - Count the continuous chars
- Initialisation:
- Initialise an empty string
compto store the compressed result. - Initialise
ito traverse theword.
- Initialise an empty string
- Loop through the word:
- While
iis less than the length ofword:- Determine the current character
cwhich isword[i]. - Count the length of the prefix of
crepeating, but limit the count to a maximum of 9. - Append the count followed by
cto thecompstring. - Increment
iby the count to move to the next segment of the string.
- Determine the current character
- While
- Return the compressed string
comp.
Video explanation
Here is the video explaining this method in detail. Please check it out:
<div class="youtube-embed"><iframe src="https://www.youtube.com/embed/ckC2dcHeBmo" frameborder="0" allowfullscreen></iframe></div>
Code
Java
public class Solution {
public String compressedString(String word) {
StringBuilder comp = new StringBuilder();
int i = 0;
while (i < word.length()) {
char ch = word.charAt(i);
int cnt = 0;
while (i < word.length() && word.charAt(i) == ch && cnt < 9) {
i++;
cnt++;
}
comp.append(cnt).append(ch);
}
return comp.toString();
}
}
Python
class Solution:
def compressedString(self, word: str) -> str:
comp: str = ""
i: int = 0
while i < len(word):
ch: str = word[i]
cnt: int = 0
while i < len(word) and word[i] == ch and cnt < 9:
i += 1
cnt += 1
comp += str(cnt) + ch
return comp
Complexity
- ⏰ Time complexity:
O(n), wherenis the length of theword. We traverse thewordonce. - 🧺 Space complexity:
O(n). In the worst case scenario thecompstring can be of length2nsince each character can result in a numeric value and the character itself being appended.