Given a String, remove all numeric digits before K number.
Method #1 : Using split() + enumerate() + index() + list comprehension
This is one of the ways in which this task can be performed. In this, we perform task of split() to get all words, getting index of K number using index() and list comprehension can be used to extract digits only after the K Number.
Python3
# Python3 code to demonstrate working of # Remove digits before K Number # Using split() + enumerate() + index() + list comprehension # initializing string test_str = 'neveropen 2 6 is 4neveropen 5 and CS8' # printing original string print ( "The original string is : " + str (test_str)) # initializing K K = 4 # get K Number index idx = test_str.split().index( str (K)) # isdigit() used to check for number res = [ele for i, ele in enumerate (test_str.split()) if not (i < idx and ele.isdigit())] res = ' ' .join(res) # printing result print ( "String after removing digits before K : " + str (res)) |
The original string is :neveropen 2 6 is 4neveropen 5 and CS8 String after removing digits before K :neveropen is 4neveropen 5 and CS8
Time Complexity: O(n)
Space Complexity: O(n)
Method #2 : Using regex() + index()
In this method, regex is used to remove all the elements before the required index, and then strings are joined pre and post index.
Python3
# Python3 code to demonstrate working of # Remove digits before K Number # Using regex() + index() import re # initializing string test_str = 'neveropen 2 6 is 4neveropen 5 and CS8' # printing original string print ( "The original string is : " + str (test_str)) # initializing K K = 4 # using regex to achieve task res = re.sub( '[023456789]' , '', test_str[ 0 : test_str.index( str (K))]) + test_str[test_str.index( str (K)):] # printing result print ( "String after removing digits before K : " + str (res)) |
The original string is :neveropen 2 6 is 4neveropen 5 and CS8 String after removing digits before K :neveropen is 4neveropen 5 and CS8
Time Complexity: O(n)
Space Complexity: O(n)
Method #3 : Using index(),replace() and slicing
Python3
# Python3 code to demonstrate working of # Remove digits before K Number # Initializing string test_str = 'neveropen 2 6 is 4neveropen 5 and CS8' # Printing original string print ( "The original string is : " + str (test_str)) # Initializing K K = 8 a = test_str.index( str (K)) digits = "0123456789" b = test_str[:a] c = test_str[a:] for i in digits: b = b.replace(i,"") # Printing result print ( "String after removing digits before K : " + (b + c)) |
The original string is :neveropen 2 6 is 4neveropen 5 and CS8 String after removing digits before K :neveropen is neveropen and CS8
Method #4 : Using list comprehension:
Python3
test_str = 'neveropen 2 6 is 4neveropen 5 and CS8' K = 4 words = test_str.split() # Printing original string print ( "The original string is : " + str (test_str)) res = [] K_reached = False for word in words: if not K_reached and word.isdigit(): continue elif word = = str (K): K_reached = True res.append(word) res = ' ' .join(res) print ( "String after removing digits before K : " + str (res)) #This code is contributed by Jyothi pinjala. |
The original string is :neveropen 2 6 is 4neveropen 5 and CS8 String after removing digits before K :neveropen isneveropen and CS8
Time Complexity: O(n)
Space Complexity: O(n)
Method #5: Using for loop and in operator
Python3
test_str = 'neveropen 2 6 is 4neveropen 5 and CS8' K = 4 # Printing original string print ( "The original string is : " + str (test_str)) # Splitting the string into words words = test_str.split() res = [] K_reached = False # Iterating through each word in the list for word in words: if not K_reached and word.isdigit(): continue elif word = = str (K): K_reached = True res.append(word) res = ' ' .join(res) print ( "String after removing digits before K : " + str (res)) #This code is contributed by Vinay Pinjala. |
The original string is :neveropen 2 6 is 4neveropen 5 and CS8 String after removing digits before K :neveropen isneveropen and CS8
Time Complexity:O(N)
Auxiliary Space :O(N)
Method#6: Using Recursive method.
Algorithm:
- Split the input string into words.
- Define a recursive helper function that takes in a list of words and a boolean value K_reached.
- The helper function pops the first word off the list of words and examines it.
- If we haven’t reached K yet and the current word is a digit, skip over it and continue recursively with the remaining list of words and the same K_reached value.
- If we encounter K, include it in the result string and set K_reached to True, then continue recursively with the remaining list of words and the updated K_reached value.
- Otherwise, include the current word in the result string and continue recursively with the remaining list of words and the same K_reached value.
- When the list of words is empty, return an empty string.
- Strip any leading or trailing whitespace from the resulting string.Call the helper function with the initial list of words and K_reached=False, and return the resulting string.
Python3
def remove_digits_before_K(test_str, K): def helper(words, K_reached): if not words: return '' word = words.pop( 0 ) if not K_reached and word.isdigit(): return helper(words, K_reached) elif word = = str (K): return word + ' ' + helper(words, True ) else : return word + ' ' + helper(words, K_reached) words = test_str.split() return helper(words, False ).strip() test_str = 'neveropen 2 6 is 4neveropen 5 and CS8' K = 4 # Printing original string print ( "The original string is : " + str (test_str)) res = remove_digits_before_K(test_str, K) print ( "String after removing digits before K : " + str (res)) |
The original string is :neveropen 2 6 is 4neveropen 5 and CS8 String after removing digits before K :neveropen isneveropen and CS8
The time complexity of the algorithm is O(n), where n is the number of words in the input string, because we need to process each word exactly once.
The auxiliary space of the algorithm is also O(n), because we create a new list of words and a new string with each recursive call to the helper function, and the maximum depth of the recursion is equal to the number of words in the input string.