Last Updated: 28 Jun, 2016

Compress the String

Moderate
Asked in companies
MicrosoftArcesiumAmazon

Problem statement

Write a program to do basic string compression. For a character which is consecutively repeated more than once, replace consecutive duplicate occurrences with the count of repetitions.

Example:
If a string has 'x' repeated 5 times, replace this "xxxxx" with "x5".
The string is compressed only when the repeated character count is more than 1.
Note:
Consecutive count of every character in the input string is less than or equal to 9. You are not required to print anything. It has already been taken care of. Just implement the given function and return the compressed string.
Input Format:
The first and only line of input contains a string without any leading and trailing spaces.
Output Format:
The output contains the string after compression printed in single line
Constraints:
0 <= N <= 10^6

Where 'N' is the length of the input string.

Time Limit: 1 sec

Approaches

01 Approach

The steps are as follows:

 

  1. Keep two indices, both starting from the initial character. Let’s say, ‘STARTINDEX’ and ‘ENDINDEX’. These indices are going to tell the start and end of the substring where the characters are the same.
  2. Start moving the ‘ENDINDEX’ to every character till the character at ‘STARTINDEX’ is a match.
  3. Whenever there is a mismatch, we can calculate the frequency of the character at the ‘STARTINDEX’ by subtracting the  ‘STARTINDEX’ from ‘ENDINDEX’. Append the character at the ‘STARTINDEX’ with its total frequency and add it to the final string you want to return. If the frequency of the character is 1, no need to append its frequency.
  4. Move the ‘STARTINDEX' to ‘ENDINDEX’.
  5. Repeat until all the characters are traversed in this manner.