Saturday, July 4, 2020

Compress the String!-HackerRank Solution

Compress the String!-HackerRank Solution

You are given a string . Suppose a character '' occurs consecutively  times in the string. Replace these consecutive occurrences of the character '' with  in the string.

For a better understanding of the problem, check the explanation.


Input Format

A single line of input consisting of the string .

Output Format

A single line of output consisting of the modified string.

Constraints

All the characters of  denote integers between  and .

Sample Input

1222311

Sample Output

(1, 1)   (3, 2)   (1, 3)   (2, 1)

Explanation

First, the character  occurs only once. It is replaced by . Then the character  occurs three times, and it is replaced by  and so on.

Also, note the single space within each compression and between the compressions.


Compress the String Solution-

Although there are many ways to solve this problem but I will solve this problem by writing the easiest code while maintaining the readability of python. 

Before we proceed let's give you a quick introduction on Itertools.groupby( )- This method calculates the keys for each element present in iterable(list, tuple, dict, etc). It returns key and iterable of grouped items.


SYNTAX- itertools.groupby(iterable, key_func)

iterable: Iterable can be of any of (list, tuple, dictionary).
key: A function that calculates keys for each element present in iterable.

from itertools import groupby
s=input()
for k,g in groupby(s):
   print(tuple([len(list(g)),int(k)]),end='\t')
  • In the first line of the code we are importing the groupby  from the module itertools.
  • Second line takes the string input
  • In the third line of the code we apply the group by function on string 's'. We are using two iterators k,g which represents key and group . key(k) contains all the unique digits in the input order.
For example say, s=1222311
than k will print 1,2,3,1 respectively with the type string whereas g or group, will return an itertools  object like this <itertools._grouper object at 0x7fb9e3fb2bd0>. In order to get a list of such object we convert it into a list(g) and get the len of that list. In the final result, we have to print it into a tuple with a space after each tuple for which we will use end='\t' which will add a tab space after each tuple.

0 comments:

Post a Comment

Feel free to share your thoughts and suggestion...