Given string str the task is to expand the string as follows:
If the string is abcd, the resultant string will be d, cd, bcd, and abcd in the concatenated form i.e. dcdbcdabcd. We basically need to concatenate all suffixes.
Examples:
Input: str = “geeks”
Output: sksekseeksgeeks
Input str = “water”
Output rerteraterwater
Simple Approach:
- Iterate through the string in reverse order i.e. from the last index to the first.
- Print the sub-strings from the current index position till the end of the string.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void printExpansion(string str)
{
int size = 0;
for ( int i = str.length() - 1; i >= 0; i--) {
string subStr = str.substr(i, ++size);
cout << subStr;
}
}
int main()
{
string str = "geeks" ;
printExpansion(str);
return 0;
}
|
Java
public class GFG {
static void printExpansion(String str)
{
for ( int i = str.length() - 1 ; i >= 0 ; i--) {
String subStr = str.substring(i);
System.out.print(subStr);
}
}
public static void main(String args[])
{
String str = "geeks" ;
printExpansion(str);
}
}
|
Python3
def printExpansion( str ):
for i in range ( len ( str ) - 1 , - 1 , - 1 ):
for j in range (i, len ( str )):
print ( str [j], end = "")
str = "geeks"
printExpansion( str )
|
C#
using System;
class GFG {
static void printExpansion(String str)
{
for ( int i = ( int )str.Length - 1; i >= 0; i--) {
String subStr = str.Substring(i);
Console.Write(subStr);
}
}
static public void Main(String []args)
{
String str = "geeks" ;
printExpansion(str);
}
}
|
Javascript
<script>
function printExpansion(str)
{
var size = 0;
for ( var i = str.length - 1; i >= 0; i--) {
var subStr = str.substring(i, i + ++size);
document.write( subStr);
}
}
var str = "geeks" ;
printExpansion(str);
</script>
|
Complexity Analysis:
-
Time Complexity: O(n2)
- Auxiliary Space: O(n)
Efficient Approach:
Maintain a suffix string (which is initially empty). Keep traversing from the end and keep appending the current character.
C++
#include <bits/stdc++.h>
using namespace std;
void printExpansion(string str)
{
string suff = "" ;
for ( int i = str.length() - 1; i >= 0; i--) {
suff = suff + str[i];
cout << suff;
}
}
int main()
{
string str = "geeks" ;
printExpansion(str);
return 0;
}
|
Java
import java.util.*;
class solution
{
static void printExpansion(String str)
{
String suff = "" ;
for ( int i = str.length() - 1 ; i >= 0 ; i--) {
suff = suff + str.charAt(i);
System.out.print(suff);
}
}
public static void main(String args[])
{
String str = "geeks" ;
printExpansion(str);
}
}
|
Python3
def printExpansion( str ):
suff = ""
for i in range ( len ( str ) - 1 , - 1 , - 1 ) :
suff = suff + str [i]
print (suff, end = "")
if __name__ = = "__main__" :
str = "geeks"
printExpansion( str )
|
C#
using System;
class GFG
{
static void printExpansion(String str)
{
String suff = "" ;
for ( int i = str.Length - 1;
i >= 0; i--)
{
suff = suff + str[i];
Console.Write(suff);
}
}
public static void Main(String []args)
{
String str = "geeks" ;
printExpansion(str);
}
}
|
Javascript
<script>
function printExpansion(str)
{
var suff = "" ;
for ( var i = str.length - 1; i >= 0; i--) {
suff = suff + str[i];
document.write( suff);
}
}
var str = "geeks" ;
printExpansion(str);
</script>
|
Complexity Analysis:
- Time Complexity: O(n)
- Auxiliary Space: O(n)
Recursive Approach:
Steps:
- If the length of the string str is 0, return an empty string.
- Otherwise, recursively call the function expand_string with the substring str[1:] and append the substring str itself to the result of the recursive call.
- Finally, return the concatenated result.
Below is the implementation of the above approach:
C++
#include <iostream>
#include <string>
std::string ExpandString( const std::string& str)
{
if (str.length() == 0) {
return "" ;
}
else {
return ExpandString(str.substr(1)) + str;
}
}
int main()
{
std::string input_str = "geeks" ;
std::string expanded_str = ExpandString(input_str);
std::cout << expanded_str << std::endl;
return 0;
}
|
Java
public class Main {
public static String expandString(String str)
{
if (str.length() == 0 ) {
return "" ;
}
else {
return expandString(str.substring( 1 )) + str;
}
}
public static void main(String[] args)
{
String inputStr = "geeks" ;
String expandedStr = expandString(inputStr);
System.out.println(expandedStr);
}
}
|
Python
def expand_string( str ):
if len ( str ) = = 0 :
return ""
else :
return expand_string( str [ 1 :]) + str
input_str = "geeks"
expanded_str = expand_string(input_str)
print (expanded_str)
|
C#
using System;
class Program
{
static string ExpandString( string str)
{
if (str.Length == 0)
{
return "" ;
}
else
{
return ExpandString(str.Substring(1)) + str;
}
}
static void Main()
{
string inputStr = "geeks" ;
string expandedStr = ExpandString(inputStr);
Console.WriteLine(expandedStr);
}
}
|
Javascript
function GFG(str) {
if (str.length === 0) {
return "" ;
} else {
return GFG(str.substring(1)) + str;
}
}
const inputStr = "geeks" ;
const expandedStr = GFG(inputStr);
console.log(expandedStr);
|
Time Complexity: O(n^2), where n is the length of the input string str.
Auxiliary Space: O(n^2)