Open In App

Python – Custom Consecutive character repetition in String

Improve
Improve
Like Article
Like
Save
Share
Report

Given a String, repeat characters consecutively by number mapped in dictionary.

Input : test_str = ‘Geeks4Geeks’, test_dict = {“G” : 3, “e” : 1, “4” : 3, “k” : 5, “s” : 3} 
Output : GGGeekkkkksss444GGGeekkkkksss 
Explanation : Each letter repeated as per value in dictionary.
Input : test_str = ‘Geeks4Geeks’, test_dict = {“G” : 3, “e” : 1, “4” : 3, “k” : 5, “s” : 1} 
Output : GGGeekkkkks444GGGeekkkkks 
Explanation : Each letter repeated as per value in dictionary. 
 

Method #1 :  Using loop

This is one of the ways in which this task can be performed. In this, we iterate through each character and check in map its repetition and repeat for that amount.

Python3




# Python3 code to demonstrate working of
# Custom Consecutive character repetition in String
# Using loop
 
# initializing string
test_str = 'Geeks4Geeks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing dictionary
test_dict = {"G" : 3, "e" : 2, "4" : 4, "k" : 5, "s" : 3}
 
res = ""
for ele in test_str:
     
    # using * operator for repetition
    # using + for concatenation
    res += ele * test_dict[ele]
 
# printing result
print("The filtered string : " + str(res))


Output

The original string is : Geeks4Geeks
The filtered string : GGGeeeekkkkksss4444GGGeeeekkkkksss

Time Complexity: O(n)

Space Complexity: O(n)

Method #2 : Using list comprehension + join()

This is yet another way in which this task can be performed. In this, we perform similar task as above function. The only difference being we use join() to merge the created repetition list.

Python3




# Python3 code to demonstrate working of
# Custom Consecutive character repetition in String
# Using list comprehension + join()
 
# initializing string
test_str = 'Geeks4Geeks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing dictionary
test_dict = {"G" : 3, "e" : 2, "4" : 4, "k" : 5, "s" : 3}
 
# using join to perform concatenation of strings
res = "".join([ele * test_dict[ele] for ele in test_str])
 
# printing result
print("The filtered string : " + str(res))


Output

The original string is : Geeks4Geeks
The filtered string : GGGeeeekkkkksss4444GGGeeeekkkkksss

Time Complexity: O(n)

Space Complexity: O(n)

Method#3: Using Recursive method.

Algorithm:

  1. If the input string string is empty, return an empty string.
  2. Else, separate the first character first_char of string from the rest of the string rest_of_string.
  3. Use the get() method on the repetitions dictionary to determine how many times the first_char should be repeated. If the character is not in the dictionary, default to repeating it once.
  4. Recursively call repeat_chars_recursively on the rest_of_string and concatenate the repeated first_char to the result.
  5. Return the final concatenated string.

Python3




def repeat_chars_recursively(string, repetitions):
    if not string: # base case: empty string
        return ''
    else:
        first_char = string[0]
        rest_of_string = string[1:]
        repeated_char = first_char * repetitions.get(first_char, 1)
        return repeated_char + repeat_chars_recursively(rest_of_string, repetitions)
 
# initializing string
test_str = 'Geeks4Geeks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing dictionary
test_dict = {"G" : 3, "e" : 2, "4" : 4, "k" : 5, "s" : 3}
 
res = repeat_chars_recursively(test_str, test_dict)
# printing result
print("The filtered string : " + str(res))


Output

The original string is : Geeks4Geeks
The filtered string : GGGeeeekkkkksss4444GGGeeeekkkkksss

Time Complexity:
The time complexity of this algorithm is O(n), where n is the length of the input string string. This is because we need to iterate through the entire string once to concatenate the repeated characters.

Auxiliary Space:
The auxiliary space complexity of this algorithm is O(n), where n is the length of the input string string. This is because we need to store the intermediate result (the repeated characters) for each recursive call on the call stack until we reach the base case. The maximum depth of the call stack is also proportional to the length of the input string.



Last Updated : 28 Feb, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads