Reverse a string preserving space positions
Write a program to reverse the given string while preserving the position of spaces.
Examples:
Input : "abc de" Output : edc ba Input : "intern at geeks" Output : skeegt an retni Input : "Help others" Output : sreh topleH
- Create a string to store results. Mark the space position of the given string in this string.
- Insert the character from the input string into the result string in reverse order.
- While inserting the character check if the result string already contains a space at index ‘j’ or not. If it contains, we copy the character to the next position.
Below is the implementation of the above steps.
C++
// C++ program to reverse a string preserving // spaces. #include <iostream> using namespace std; // Function to reverse the string // and preserve the space position string reverses(string str) { // Mark spaces in result int n = str.size(); string result(n, '\0' ); for ( int i = 0; i < n; i++) if (str[i] == ' ' ) result[i] = ' ' ; // Traverse input string from beginning // and put characters in result from end int j = n - 1; for ( int i = 0; i < str.length(); i++) { // Ignore spaces in input string if (str[i] != ' ' ) { // ignore spaces in result. while (result[j] == ' ' ) j--; result[j] = str[i]; j--; } } return result; } // Driver code int main() { string str = "internship at geeks for geeks" ; cout << reverses(str) << endl; return 0; } |
Java
// Java program to reverse a string // preserving spaces. public class ReverseStringPreserveSpace { // Function to reverse the string // and preserve the space position static void reverses(String str) { char [] inputArray = str.toCharArray(); char [] result = new char [inputArray.length]; // Mark spaces in result for ( int i = 0 ; i < inputArray.length; i++) { if (inputArray[i] == ' ' ) { result[i] = ' ' ; } } // Traverse input string from beginning // and put characters in result from end int j = result.length - 1 ; for ( int i = 0 ; i < inputArray.length; i++) { // Ignore spaces in input string if (inputArray[i] != ' ' ) { // ignore spaces in result. if (result[j] == ' ' ) { j--; } result[j] = inputArray[i]; j--; } } System.out.println(String.valueOf(result)); } // driver function public static void main(String[] args) { reverses( "internship at geeks for geeks" ); } } // This code is contributed by Rishabh Jain |
Python3
# Python3 program to reverse a string preserving # spaces. # Function to reverse the string # and preserve the space position def reverses(st): # Mark spaces in result n = len (st) result = [ 0 ] * n for i in range (n): if (st[i] = = ' ' ): result[i] = ' ' # Traverse input string from beginning # and put characters in result from end j = n - 1 for i in range ( len (st)): # Ignore spaces in input string if (st[i] ! = ' ' ): # Ignore spaces in result. if (result[j] = = ' ' ): j - = 1 result[j] = st[i] j - = 1 return ''.join(result) # Driver code if __name__ = = "__main__" : st = "internship at geeks for geeks" print (reverses(st)) # This code is contributed by ukasp |
C#
// C# program to reverse a // string preserving spaces. using System; class GFG { // Function to reverse the string // and preserve the space position static void reverses( string str) { char [] inputArray = str.ToCharArray(); char [] result = new char [inputArray.Length]; // Mark spaces in result for ( int i = 0; i < inputArray.Length; i++) { if (inputArray[i] == ' ' ) { result[i] = ' ' ; } } // Traverse input string from beginning // and put characters in result from end int j = result.Length - 1; for ( int i = 0; i < inputArray.Length; i++) { // Ignore spaces in input string if (inputArray[i] != ' ' ) { // ignore spaces in result. if (result[j] == ' ' ) { j--; } result[j] = inputArray[i]; j--; } } for ( int i = 0; i < result.Length; i++) Console.Write(result[i]); } // Driver code public static void Main() { reverses( "internship at geeks for geeks" ); } } // This code is contributed by Sam007 |
Javascript
<script> // Javascript program to reverse a string // preserving spaces. // Function to reverse the string // and preserve the space position function reverses(str) { let inputArray = str.split( "" ); let result = new Array(inputArray.length); // Mark spaces in result for (let i = 0; i < inputArray.length; i++) { if (inputArray[i] == ' ' ) { result[i] = ' ' ; } } // Traverse input string from beginning // and put characters in result from end let j = result.length - 1; for (let i = 0; i < inputArray.length; i++) { // Ignore spaces in input string if (inputArray[i] != ' ' ) { // ignore spaces in result. if (result[j] == ' ' ) { j--; } result[j] = inputArray[i]; j--; } } document.write((result).join( "" )); } // driver function reverses( "internship at geeks for geeks" ); // This code is contributed by ab2127 </script> |
Output:
skeegrofsk ee gtapi hsn retni
Time complexity: O(N)
Auxiliary Space: O(N)
Optimized Solution:
The idea is to use two pointers to reverse.
C++
// C++ program to implement // the above approach #include <iostream> using namespace std; void preserveSpace(string &str) { int n = str.length(); // Initialize two pointers as two corners int start = 0; int end = n - 1; // Move both pointers toward each other while (start < end) { // If character at start or end is space, // ignore it if (str[start] == ' ' ) { start++; continue ; } else if (str[end] == ' ' ) { end--; continue ; } // If both are not spaces, do swap else { swap(str[start], str[end]); start++; end--; } } } // Driver code int main() { string str = "internship at geeks for geeks" ; preserveSpace(str); cout << str; return 0; } |
Java
// Java program to implement // the above approach import java.io.*; import java.util.*; class GFG{ public static void preserveSpace(String str) { int n = str.length(); // Initialize two pointers as two corners int start = 0 ; int end = n - 1 ; char [] Str = str.toCharArray(); // Move both pointers toward each other while (start < end) { // If character at start or end // is space, ignore it if (Str[start] == ' ' ) { start++; continue ; } else if (Str[end] == ' ' ) { end--; continue ; } // If both are not spaces, do swap else { char temp = Str[start]; Str[start] = Str[end]; Str[end] = temp; start++; end--; } } System.out.println(String.valueOf(Str)); } // Driver Code public static void main(String[] args) { String str = "internship at geeks for geeks" ; preserveSpace(str); } } // This code is contributed by divyeshrabadiya07 |
Python3
# Python3 program to implement # the above approach def preserveSpace( Str ): n = len ( Str ) Str = list ( Str ) # Initialize two pointers # as two corners start = 0 end = n - 1 # Move both pointers # toward each other while (start < end): # If character at start # or end is space, # ignore it if ( Str [start] = = ' ' ): start + = 1 continue elif ( Str [end] = = ' ' ): end - = 1 continue # If both are not # spaces, do swap else : Str [start], Str [end] = ( Str [end], Str [start]) start + = 1 end - = 1 print (''.join( Str )) # Driver code Str = "internship at geeks for geeks" preserveSpace( Str ); # This code is contributed by avanitrachhadiya2155 |
C#
// C# program to implement // the above approach using System; using System.Collections.Generic; class GFG{ static void preserveSpace( string str) { int n = str.Length; // Initialize two pointers // as two corners int start = 0; int end = n - 1; char [] Str = str.ToCharArray(); // Move both pointers toward // each other while (start < end) { // If character at start or // end is space, ignore it if (Str[start] == ' ' ) { start++; continue ; } else if (Str[end] == ' ' ) { end--; continue ; } // If both are not spaces, do swap else { char temp = Str[start]; Str[start] = Str[end]; Str[end] = temp; start++; end--; } } Console.Write( new string (Str)); } // Driver code static void Main() { string str = "internship at geeks for geeks" ; preserveSpace(str); } } // This code is contributed by divyesh072019 |
Javascript
<script> // Javascript program to implement // the above approach function preserveSpace(str) { let n = str.length; // Initialize two pointers // as two corners let start = 0; let end = n - 1; let Str = str.split( '' ); // Move both pointers toward // each other while (start < end) { // If character at start or // end is space, ignore it if (Str[start] == ' ' ) { start++; continue ; } else if (Str[end] == ' ' ) { end--; continue ; } // If both are not spaces, do swap else { let temp = Str[start]; Str[start] = Str[end]; Str[end] = temp; start++; end--; } } document.write(Str.join( "" )); } let str = "internship at geeks for geeks" ; preserveSpace(str); </script> |
Output:
skeegrofsk ee gtapi hsn retni
Time complexity: O(n)
Auxiliary Space: O(1)
This article is contributed by Rishabh Jain. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Login to comment...