Given a string, write a recursive program to reverse it

Method 1 (Using Stack):
C++
#include <bits/stdc++.h>
using namespace std;
void recursiveReverse(string &str)
{
stack< char > st;
for ( int i=0; i<str.length(); i++)
st.push(str[i]);
for ( int i=0; i<str.length(); i++) {
str[i] = st.top();
st.pop();
}
}
int main()
{
string str = "geeksforgeeks" ;
recursiveReverse(str);
cout << str;
return 0;
}
|
Java
import java.util.*;
class GFG
{
public static String recursiveReverse( char []str)
{
Stack<Character> st = new Stack<>();
for ( int i= 0 ; i<str.length; i++)
st.push(str[i]);
for ( int i= 0 ; i<str.length; i++) {
str[i] = st.peek();
st.pop();
}
return String.valueOf(str);
}
public static void main(String []args)
{
String str = "geeksforgeeks" ;
str = recursiveReverse(str.toCharArray());
System.out.println(str);
}
}
|
Python3
def recursiveReverse( str ):
stack = []
for i in range ( len ( str )):
stack.append( str [i])
for i in range ( len ( str )):
str [i] = stack.pop()
if __name__ = = "__main__" :
str = "geeksforgeeks"
str = list ( str )
recursiveReverse( str )
str = ''.join( str )
print ( str )
|
C#
using System;
using System.Collections.Generic;
class GFG
{
public static String recursiveReverse( char []str)
{
Stack< char > st = new Stack< char >();
for ( int i = 0; i < str.Length; i++)
st.Push(str[i]);
for ( int i = 0; i < str.Length; i++)
{
str[i] = st.Peek();
st.Pop();
}
return String.Join( "" ,str);
}
public static void Main()
{
String str = "geeksforgeeks" ;
str = recursiveReverse(str.ToCharArray());
Console.WriteLine(str);
}
}
|
Javascript
<script>
function recursiveReverse(str)
{
var revString = "" ;
for ( var i = str.length - 1; i >= 0; i--)
{
revString += str[i];
}
return revString;
}
var str = "geeksforgeeks" ;
document.write(recursiveReverse(str));
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(n)
Method 2 (Iterative):
C++
#include <bits/stdc++.h>
using namespace std;
void reverseStr(string& str)
{
int n = str.length();
for ( int i = 0; i < n / 2; i++)
swap(str[i], str[n - i - 1]);
}
int main()
{
string str = "geeksforgeeks" ;
reverseStr(str);
cout << str;
return 0;
}
|
Java
import java.util.Scanner;
public class reverseStr
{
void stringReverse()
{
String str = "geeksforgeeks" ;
int length = str.length();
StringBuffer revString = new StringBuffer();
for ( int i = length - 1 ;
i >= 0 ; i--)
{
revString.append(str.charAt(i));
}
System.out.println(revString);
}
public static void main(String []args)
{
reverseStr s= new reverseStr();
s.stringReverse();
}
}
|
Python
def reverseStr( str ):
n = len ( str )
str1 = ''
i = n - 1
while i > = 0 :
str1 + = str [i]
i - = 1
print (str1)
def main():
str = "geeksforgeeks" ;
reverseStr( str );
if __name__ = = "__main__" :
main()
|
C#
using System;
class GFG
{
static String reverseStr(String str)
{
int n = str.Length;
for ( int i = 0; i < n / 2; i++)
str = swap(str,i,n - i - 1);
return str;
}
static String swap(String str, int i, int j)
{
char []ch = str.ToCharArray();
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
return String.Join( "" ,ch);
}
public static void Main(String[] args)
{
string str = "geeksforgeeks" ;
str= reverseStr(str);
Console.WriteLine(str);
}
}
|
PHP
<?php
function reverseStr(& $str )
{
$n = strlen ( $str );
for ( $i = 0; $i < $n / 2; $i ++)
list( $str [ $i ],
$str [ $n - $i - 1]) = array ( $str [ $n - $i - 1],
$str [ $i ]);
}
$str = "geeksforgeeks" ;
reverseStr( $str );
echo $str ;
?>
|
Javascript
<script>
function reverseStr(str)
{
let n = str.length;
for (let i = 0; i < parseInt(n / 2, 10); i++)
str = swap(str,i,n - i - 1);
return str;
}
function swap(str, i, j)
{
let ch = str.split( '' );
let temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
return ch.join( "" );
}
let str = "geeksforgeeks" ;
str= reverseStr(str);
document.write(str);
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(1)
Method 3 (Iterative using two pointers):
C++
#include <bits/stdc++.h>
using namespace std;
void reverseStr(string& str)
{
int n = str.length();
for ( int i=0, j=n-1; i<j; i++,j--)
swap(str[i], str[j]);
}
int main()
{
string str = "geeksforgeeks" ;
reverseStr(str);
cout << str;
return 0;
}
|
Java
import java.io.*;
class GFG {
static void reverseStr(String str)
{
int n = str.length();
char []ch = str.toCharArray();
char temp;
for ( int i= 0 , j=n- 1 ; i<j; i++,j--)
{
temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
System.out.println(ch);
}
public static void main(String[] args) {
String str = "geeksforgeeks" ;
reverseStr(str);
}
}
|
Python3
def reverseStr( str ):
n = len ( str )
i, j = 0 , n - 1
while i < j:
str [i], str [j] = str [j], str [i]
i + = 1
j - = 1
if __name__ = = "__main__" :
str = "geeksforgeeks"
str = list ( str )
reverseStr( str )
str = ''.join( str )
print ( str )
|
C#
using System;
class GFG
{
static void reverseStr(String str)
{
int n = str.Length;
char []ch = str.ToCharArray();
char temp;
for ( int i=0, j=n-1; i<j; i++,j--)
{
temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
Console.WriteLine(ch);
}
public static void Main(String[] args)
{
String str = "geeksforgeeks" ;
reverseStr(str);
}
}
|
PHP
<?php
function reverseStr (& $str )
{
$n = strlen ( $str );
for ( $i = 0, $j = $n - 1;
$i < $j ; $i ++, $j --)
list( $str [ $i ],
$str [ $j ]) = array ( $str [ $j ],
$str [ $i ]);
}
$str = "geeksforgeeks" ;
reverseStr( $str );
echo $str ;
?>
|
Javascript
<script>
function reverseStr(str)
{
let n = str.length;
let ch = str.split( "" );
let temp;
for (let i=0, j=n-1; i<j; i++,j--)
{
temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
document.write(ch.join( "" )+ "<br>" );
}
let str = "geeksforgeeks" ;
reverseStr(str);
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(1)
Method 4 (Recursive):
C++
#include <bits/stdc++.h>
using namespace std;
void recursiveReverse(string &str, int i = 0)
{
int n = str.length();
if (i == n / 2)
return ;
swap(str[i], str[n - i - 1]);
recursiveReverse(str, i + 1);
}
int main()
{
string str = "geeksforgeeks" ;
recursiveReverse(str);
cout << str;
return 0;
}
|
Java
import java.io.*;
class GFG
{
static void recursiveReverse( char [] str, int i)
{
int n = str.length;
if (i == n / 2 )
return ;
swap(str,i,n - i - 1 );
recursiveReverse(str, i + 1 );
}
static void swap( char []arr, int i, int j)
{
char temp= arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void main(String[] args)
{
char [] str = "geeksforgeeks" .toCharArray();
recursiveReverse(str, 0 );
System.out.println(String.valueOf(str));
}
}
|
Python3
def recursiveReverse( str , i = 0 ):
n = len ( str )
if i = = n / / 2 :
return
str [i], str [n - i - 1 ] = str [n - i - 1 ], str [i]
recursiveReverse( str , i + 1 )
if __name__ = = "__main__" :
str = "geeksforgeeks"
str = list ( str )
recursiveReverse( str )
str = ''.join( str )
print ( str )
|
C#
using System;
public class GFG
{
static void recursiveReverse( char [] str, int i)
{
int n = str.Length;
if (i == n / 2)
return ;
swap(str,i,n - i - 1);
recursiveReverse(str, i + 1);
}
static char [] swap( char []arr, int i, int j)
{
char temp= arr[i];
arr[i]=arr[j];
arr[j]=temp;
return arr;
}
public static void Main(String[] args)
{
char [] str = "geeksforgeeks" .ToCharArray();
recursiveReverse(str,0);
Console.WriteLine(String.Join( "" ,str));
}
}
|
C++
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str = "geeksforgeeks" ;
reverse(str.begin(),str.end());
cout << str;
return 0;
}
|
Java
class GFG
{
public static void main(String[] args)
{
String str = "geeksforgeeks" ;
str = reverse(str);
System.out.println(str);
}
static String reverse(String input)
{
char [] temparray = input.toCharArray();
int left, right = 0 ;
right = temparray.length - 1 ;
for (left = 0 ; left < right; left++, right--)
{
char temp = temparray[left];
temparray[left] = temparray[right];
temparray[right] = temp;
}
return String.valueOf(temparray);
}
}
|
Python
def reverseStr( str ):
print ( str [:: - 1 ])
def main():
str = "geeksforgeeks" ;
reverseStr( str );
if __name__ = = "__main__" :
main()
|
C#
using System;
class GFG
{
public static void Main(String[] args)
{
String str = "geeksforgeeks" ;
str = reverse(str);
Console.WriteLine(str);
}
static String reverse(String input)
{
char [] temparray = input.ToCharArray();
int left, right = 0;
right = temparray.Length - 1;
for (left = 0; left < right; left++, right--)
{
char temp = temparray[left];
temparray[left] = temparray[right];
temparray[right] = temp;
}
return String.Join( "" ,temparray);
}
}
|
PHP
<?php
function reverseStr( $str )
{
echo strrev ( $str );
}
$str = "geeksforgeeks" ;
reverseStr( $str );
?>
|
Time Complexity: O(n) where n is length of string
Auxiliary Space: O(n)
Method 5: Using the inbuilt method ‘.reverse()’ of StringBuffer class in Java
The idea is to initialise an object of the StringBuffer class using the given string which needs to be reversed and then invoke the .reverse() method. After doing so, you can convert the StringBuffer to a string by using the toString() function.
Below is the implementation of the above idea:
C++
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::string str = "geeksforgeeks" ;
std::reverse(str.begin(),str.end());
std::cout << str << std::endl;
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG {
public static void main (String[] args) {
String str = "geeksforgeeks" ;
StringBuffer sb = new StringBuffer(str);
sb.reverse();
System.out.println(sb.toString());
}
}
|
C#
using System;
class Program {
static void Main( string [] args)
{
string str = "geeksforgeeks" ;
char [] charArray
= str.ToCharArray();
Array.Reverse(charArray);
str = new string (
charArray);
Console.WriteLine(
str);
}
}
|
Python3
if __name__ = = '__main__' :
str = "geeksforgeeks"
sb = str [:: - 1 ]
print (sb)
|
Javascript
let str = "geeksforgeeks" ;
str = str.split( '' ).reverse().join( '' );
console.log(str);
|
Time Complexity: O(n)
Auxiliary Space: O(n)
The extra space is used to store the StringBuffer string.
Method 6: Using the inbuilt method ‘reverse()’ in C++ STL
Below is the implementation of the above idea:
C++
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str = "geeksforgeeks" ;
reverse(str.begin(), str.end());
cout << str;
return 0;
}
|
Java
import java.util.*;
class Main {
public static void main(String[] args) {
String str = "geeksforgeeks" ;
StringBuilder sb = new StringBuilder(str);
sb.reverse();
System.out.println(sb);
}
}
|
Python3
string = "geeksforgeeks"
string = ''.join( reversed (string))
print (string)
|
C#
using System;
using System.Linq;
class Program {
static void Main( string [] args)
{
string str = "geeksforgeeks" ;
str = new string (str.Reverse().ToArray());
Console.WriteLine(str);
Console.ReadLine();
}
}
|
Javascript
let str = "geeksforgeeks" ;
str = str.split( "" ).reverse().join( "" );
console.log(str);
|
Time Complexity: O(n)
Auxiliary Space: O(1)
Method 7: Using the inbuilt function reversed() in Python
Below is the implementation of the above idea:
C++
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string str = "hello world" ;
std::reverse(str.begin(), str.end());
std::cout << "Reversed string: " << str << std::endl;
return 0;
}
|
Python3
string = "geeksforgeeks"
string = ''.join( reversed (string))
print (string)
|
C#
using System;
using System.Linq;
class Program
{
static void Main( string [] args)
{
string str = "geeksforgeeks" ;
char [] arr = str.ToCharArray();
Array.Reverse(arr);
string reversedStr = new string (arr);
Console.WriteLine( "Reversed string: " + reversedStr);
}
}
|
Java
import java.util.*;
public class Main {
public static void main(String[] args) {
String str = "hello world" ;
StringBuilder sb = new StringBuilder(str);
sb.reverse();
str = sb.toString();
System.out.println( "Reversed string: " + str);
}
}
|
Output
Reversed string: dlrow olleh
Time Complexity: O(n)
Auxiliary Space: O(1), As constant extra space is used.
Please Login to comment...