Open In App

Python | Substitute character with its occurrence

Sometimes, while working with Python, we can have a problem in which we need to substitute a character with its occurrence in a string. This a peculiar problem but can have application in many domains. Lets discuss certain ways in which this task can be performed. 

Method #1 : Using loop This is brute way to solve the problem. In this, we run a loop for each character in string and perform the substitution while increasing the counter each time. 






# Python3 code to demonstrate working of
# Substitute character with its occurrence
# Using loop
 
# initializing string
test_str = "geeksforgeeks is best for geeks"
 
# printing original string
print("The original string is : " + test_str)
 
# initializing letter
test_let = 'g'
 
# Substitute character with its occurrence
# Using loop
res = ''
count = 1
for chr in test_str:
    if chr == test_let:
        res += str(count)
        count += 1
    else:
        res += chr
 
# printing result
print("The string after performing substitution : " + str(res))

Output : 
The original string is : geeksforgeeks is best for geeks
The string after performing substitution : 1eeksfor2eeks is best for 3eeks

Time complexity: O(n), where n is the length of the input string test_str. 
Auxiliary space: O(n), where n is the length of the input string test_str.



Method #2: Using lambda + regex + next() The combination of above functions can be used to perform this task. In this we perform the task of iteration using lambda, the regex and next() is used to perform the task of count iteration and finding the target char. 




# Python3 code to demonstrate working of
# Substitute character with its occurrence
# Using lambda + regex + next()
from itertools import count
import re
 
# initializing string
test_str = "geeksforgeeks is best for geeks"
 
# printing original string
print("The original string is : " + test_str)
 
# initializing letter
test_let = 'g'
 
# Substitute character with its occurrence
# Using lambda + regex + next()
cnt = count(1)
res = re.sub(r"g", lambda x: "{}".format(next(cnt)), test_str)
 
# printing result
print("The string after performing substitution : " + str(res))

Output : 
The original string is : geeksforgeeks is best for geeks
The string after performing substitution : 1eeksfor2eeks is best for 3eeks

Time complexity: O(n), where n is the length of the input string.
Auxiliary space: O(1), since the space used by the count iterator and the lambda function is constant and does not depend on the size of the input. 

Method #3: Using count() method and slicing




# Python3 code to demonstrate working of
# Substitute character with its occurrence
 
# initializing string
test_str = "geeksforgeeks is best for geeks"
 
# printing original string
print("The original string is : " + test_str)
 
# initializing letter
test_let = 'g'
 
# Substitute character with its occurrence
res = ''
for i in range(0,len(test_str)):
    if(test_str[i]==test_let):
        res+=str(test_str[:i].count(test_let)+1)
    else:
        res+=test_str[i]
 
# printing result
print("The string after performing substitution : " + str(res))

Output
The original string is : geeksforgeeks is best for geeks
The string after performing substitution : 1eeksfor2eeks is best for 3eeks

Time Complexity: O(n)
Auxiliary Space: O(n)

Method #4: Using Replace() Method




#Python3 code to demonstrate working of
#Substitute character with its occurrence
#Using Replace() Method
#initializing string
test_str = "geeksforgeeks is best for geeks"
 
#printing original string
print("The original string is : " + test_str)
 
#initializing letter
test_let = 'g'
 
#Substitute character with its occurrence
count = 1
for i in range(test_str.count(test_let)):
  test_str = test_str.replace(test_let, str(count), 1)
  count += 1
 
#printing result
print("The string after performing substitution : " + str(test_str))

Output
The original string is : geeksforgeeks is best for geeks
The string after performing substitution : 1eeksfor2eeks is best for 3eeks

Time Complexity: O(n^2)
Auxiliary Space: O(n)

Method #5: Using operator.countOf() method and slicing

  1. Initiated a for loop to traverse the list
  2. Used operator.countOf() and slicing to replace the given character with its occurence and concatenate to res
  3. Display res




# Python3 code to demonstrate working of
# Substitute character with its occurrence
 
# initializing string
test_str = "geeksforgeeks is best for geeks"
 
# printing original string
print("The original string is : " + test_str)
 
# initializing letter
test_let = 'g'
 
# Substitute character with its occurrence
res = ''
import operator
for i in range(0,len(test_str)):
    if(test_str[i]==test_let):
        res+=str(operator.countOf(test_str[:i],test_let)+1)
    else:
        res+=test_str[i]
 
# printing result
print("The string after performing substitution : " + str(res))

Output
The original string is : geeksforgeeks is best for geeks
The string after performing substitution : 1eeksfor2eeks is best for 3eeks

Time Complexity : O(N)
Auxiliary Space : O(1)

Method #6: Using list comprehension and join() method

Here’s an alternative method that uses a list comprehension to iterate through each character in the string and replace the specified character with its occurrence. The join() method is used to join the characters back together to form the final string.




# Python3 code to demonstrate working of
# Substitute character with its occurrence
 
# initializing string
test_str = "geeksforgeeks is best for geeks"
 
# printing original string
print("The original string is : " + test_str)
 
# initializing letter
test_let = 'g'
 
# Substitute character with its occurrence
res = ''.join([str(test_str[:i].count(test_let) + 1) if char == test_let else char for i, char in enumerate(test_str)])
 
# printing result
print("The string after performing substitution : " + str(res))

Output
The original string is : geeksforgeeks is best for geeks
The string after performing substitution : 1eeksfor2eeks is best for 3eeks

Time Complexity: O(n)
Auxiliary Space: O(n)


Article Tags :