Sometimes, while working with Python strings, we can have a problem in which we need to perform the slice and print of strings in reverse order. This can have applications in day-day programming. Let us discuss certain ways in which this task can be performed.
Method #1: Using loops
This is the brute-force way in which this task can be performed. In this, we iterate the list in reverse order and store the incremental strings in the list.
Python3
# Python3 code to demonstrate working of # Reverse Incremental String Slicing # Using loop # initializing string test_str = "neveropen" # printing original string print ( "The original string is : " + test_str) # Reverse Incremental String Slicing # Using loop res = [] sub = '' for chr in reversed (test_str): sub + = chr res.append(sub) # printing result print ( "The incremental reverse strings : " + str (res)) |
The original string is :neveropen The incremental reverse strings : ['s', 'sk', 'ske', 'skee', 'skeeg']
Method #2: Using list slicing + list comprehension
This is yet another way in which this task can be performed. In this, we iterate the string list using list comprehension and slicing is used to perform incremental slicing.
Python3
# Python3 code to demonstrate working of # Reverse Incremental String Slicing # Using list comprehension + list slicing # initializing string test_str = "neveropen" # printing original string print ( "The original string is : " + test_str) # Reverse Incremental String Slicing # Using list comprehension + list slicing res = [test_str[ - 1 : idx: - 1 ] for idx in range ( - 2 , - 2 - len (test_str), - 1 )] # printing result print ( "The incremental reverse strings : " + str (res)) |
The original string is :neveropen The incremental reverse strings : ['s', 'sk', 'ske', 'skee', 'skeeg']
Method #3: Using accumulate + string slicing
This is another way to perform the task. We can use string slicing to reverse the string and accumulate is used to iterate over the string and slice the string in sub-strings.
Python3
# Python3 code to demonstrate working of # Reverse Incremental String Slicing # Using accumulate + string slicing from itertools import accumulate import operator # initializing string test_str = "neveropen" # printing original string print ( "The original string is : " + test_str) # Reverse Incremental String Slicing # Using accumulate + string slicing ans = list (accumulate(test_str[:: - 1 ], operator.add)) # printing result print ( "The incremental reverse strings : " + str (ans)) |
The original string is :neveropen The incremental reverse strings : ['s', 'sk', 'ske', 'skee', 'skeeg']
Time Complexity: O(n)
Auxiliary Space: O(n)
Method #4: Using slicing
Python3
# Python3 code to demonstrate working of # Reverse Incremental String Slicing # Using loop # initializing string test_str = "neveropen" # printing original string print ( "The original string is : " + test_str) # Reverse Incremental String Slicing # Using loop res = [] x = test_str[:: - 1 ] for i in range ( 0 , len (x)): res.append(x[:i + 1 ]) # printing result print ( "The incremental reverse strings : " + str (res)) |
The original string is :neveropen The incremental reverse strings : ['s', 'sk', 'ske', 'skee', 'skeeg']
Method #5: Using reduce function
- Import the reduce function from the functools module.
- Define a function called reverse_incremental_string that takes two arguments: an accumulator list acc and a character chr.
- Inside the reverse_incremental_string function, append the previous substring and the current character to the accumulator list.
- Return the accumulator list.
- Define a string called test_str to store the input string.
- Apply the reduce function to the reversed string, using reverse_incremental_string as the reducing function and [”] as the initial value of the accumulator.
- The final result is a list of incremental reverse strings, excluding the empty string at the beginning.
Python3
from functools import reduce def reverse_incremental_string(acc, chr ): # Append the previous substring and the current character to the accumulator list acc.append(acc[ - 1 ] + chr ) return acc test_str = "neveropen" # Apply the reduce function to the reversed string # The initial value of the accumulator is [''], which represents the empty string # The reverse_incremental_string function is applied to each character of the reversed string # The final result is the list of incremental reverse strings, excluding the empty string at the beginning res = reduce (reverse_incremental_string, reversed (test_str), ['']) print ( "The incremental reverse strings : " + str (res[ 1 :])) |
The incremental reverse strings : ['s', 'sk', 'ske', 'skee', 'skeeg']
Time complexity: O(n), where n is the length of the input string. This is because the reduce function applies the reverse_incremental_string function to each character of the reversed string, resulting in a linear time complexity.
Auxiliary space: O(n), where n is the length of the input string. This is because we use a list to store the incremental reverse strings as they are computed. The size of this list grows linearly with the length of the input string.