String Compression – HackerRank Solution

In this post, we will solve String Compression HackerRank Solution. This problem (String Compression) is a part of HackerRank Functional Programming series.


Joseph and Jane are making a contest for apes. During the process, they have to communicate frequently with each other. Since they are not completely human, they cannot speak properly. They have to transfer messages using postcards of small sizes.
To save space on the small postcards, they devise a string compression algorithm:

  • If a character, ch, occurs n(> 1) times in a row, then it will be represented by {ch}{n}, where {x} is the value of x. For example, if the substring is a sequence of  4a‘ (“aaaa“), it will be represented as “a4“.
  • If a character, ch, occurs exactly one time in a row, then it will be simply represented as {ch}. For example, if the substring is “a”, then it will be represented as “a”.

Help Joseph to compress a message, msg.


The only line of input contains a string, msg.


Print the string msg as a compressed message.


  • 1 <= length(msg) <= 105
  • msg consists of lowercase English characters (az) only.

Sample Input #00


Sample Output #00


Sample Input #01


Sample Output #01


Sample Input #02


Sample Output #02



Sample Case #00: msg = “abcaaabbb”. Here, the first 3 characters occur exactly once, and the rest of them occur  times in a sequence.

Sample Case #01: msg = “abcd“. As there is no multiple consecutive occurrence of any character, the compressed message will be same as original one.

Sample Case #02: msg = “aaabaaaaccaaaaba“. In the first 3 occurrences, ‘a‘ is repeated 4 times, while in the last occurrence, there is only one ‘a‘. Also,’c‘ occurs two times, and ‘b‘ occurs one time in both occurrences.

Solution – String Compression – HackerRank Solution



object Solution {
  def main(args: Array[String]): Unit = {
    case class Item(c: Char, count: Int)

      .foldLeft(List[Item]()) {
        case (Item(c, count) :: cs, next) if c == next => Item(c, count + 1) :: cs
        case (list, next) => Item(next, 1) :: list
      .map {
        case Item(c, 1) => c.toString
        case Item(c, n) => c.toString + n
      .reduce((a, b) => b + a))

Note: This problem (String Compression) is generated by HackerRank but the solution is provided by CodingBroz. This tutorial is only for Educational and Learning purpose.

Leave a Comment

Your email address will not be published. Required fields are marked *