In the String Compression problem, we have given an array a[ ] of type char. Compress it as the character and count of a particular character (if the count of character is 1 then the only character is stored in a compressed array). The length of the compressed array should be equal to less than the original array. Return the length of the compressed array.
Table of Contents
Example
Input : a[ ] = {‘a’, ‘a’, ‘a’, ‘b’, ‘b’}
Output : 4 (as the compressed array will be {‘a’, ‘3’, ‘b’, ‘2’})
Input : a[ ] = {‘a’}
Output : 1 (as the compressed array will be {‘a’}. As count = 1 so compressed array will only contain the character and not the count)
Algorithm for String Compression
- Initialize a character array of size n.
- Declare a variable result as 0 and count as 1.
- Traverse through the array and count the characters of a similar kind.
- If the count of a character is 1 increment the result by 1 as the only character is supposed to be in the compressed array.
- Else increment the result by 2 for both character and its count.
- Print the result.
Time Complexity: O(n) where n is the number of elements in the array. As we are traversing every element once therefore time complexity is O(n).
Auxiliary Space: O(1) because we don’t use any auxiliary space to perform the operations.
C++ Program for String Compression
#include <bits/stdc++.h> using namespace std; void compression(char a[], int n){ int result = 0; for(int i=0; i<n; i++){ int count = 1; while(i<n-1 && a[i] == a[i + 1]){ count++; i++; } if(count==1){ result++; } else{ result = result + 2; } } cout<<result; } int main(){ char a[] = {'a', 'a', 'a', 'b', 'b'}; int n = sizeof(a)/sizeof(a[0]); compression(a, n); return 0; }
4
Java Program for String Compression
class StringCompression{ static void compression(char[] a, int n){ int result = 0; for(int i=0; i<n; i++){ int count = 1; while(i<n-1 && a[i] == a[i+1]){ count++; i++; } if(count==1){ result++; } else{ result = result + 2; } } System.out.println(result); } public static void main(String[] args){ char[] a = {'a', 'a', 'a', 'b', 'b'}; int n = a.length; compression(a, n); } }
4