Given a string, find concatenation of all substrings in lexicographic order.
Examples:
Input : s = “abc”
Output : aababcbbcc
The substrings of s in lexicographic order are “a”, “b”, “c”, “ab”, “abc”, “bc”. Concatenation of substrings is “a”+”ab”+”abc”+”b”+”bc”+”c” = “aababcbbcc”.
Input : s = “cba”
Output : abbaccbcba
- Find all the substrings of string and store it in a string array. The size of array would be n*(n+1)/2 where n is length of input string.
- Sort the string array to make them all in lexicographical order.
- Concatenate the strings of string array in another empty string.
Implementation:
C++
// CPP Program to create concatenation of all // substrings in lexicographic order. #include <bits/stdc++.h> using namespace std;
string lexicographicSubConcat(string s) { int n = s.length();
// Creating an array to store substrings
int sub_count = n*(n+1)/2;
string arr[sub_count];
// finding all substrings of string
int index = 0;
for ( int i = 0; i < n; i++)
for ( int len = 1; len <= n - i; len++)
arr[index++] = s.substr(i, len);
// Sort all substrings in lexicographic
// order
sort(arr, arr + sub_count);
// Concatenating all substrings
string res = "" ;
for ( int i = 0; i < sub_count; i++)
res += arr[i];
return res;
} int main()
{ string s = "abc" ;
cout << lexicographicSubConcat(s);
return 0;
} |
Java
// Java Program to create concatenation of all // substrings in lexicographic order. import java.util.*;
class GFG
{ static String lexicographicSubConcat(String s)
{ int n = s.length();
// Creating an array to store substrings
int sub_count = n*(n+ 1 )/ 2 ;
String []arr = new String[sub_count];
// finding all substrings of string
int index = 0 ;
for ( int i = 0 ; i < n; i++)
for ( int len = 1 ; len <= n - i; len++)
{
arr[index++] = s.substring(i, i+len);
}
// Sort all substrings in lexicographic
// order
Arrays.sort(arr);
// Concatenating all substrings
String res = "" ;
for ( int i = 0 ; i < sub_count; i++)
res += arr[i];
return res;
} // Driver code public static void main(String[] args)
{ String s = "abc" ;
System.out.println(lexicographicSubConcat(s));
} } // This code has been contributed by 29AjayKumar |
Python3
# Python Program to create concatenation of all # substrings in lexicographic order. def lexicographicSubConcat(s):
n = len (s);
# Creating an array to store substrings
sub_count = (n * (n + 1 )) / / 2 ;
arr = [ 0 ] * sub_count;
# finding all substrings of string
index = 0 ;
for i in range (n):
for j in range ( 1 ,n - i + 1 ):
arr[index] = s[i:i + j];
index + = 1 ;
# Sort all substrings in lexicographic
# order
arr.sort();
# Concatenating all substrings
res = "";
for i in range (sub_count):
res + = arr[i];
return res;
s = "abc" ;
print (lexicographicSubConcat(s));
# This code is contributed by Princi Singh |
C#
// C# Program to create concatenation of all // substrings in lexicographic order. using System;
class GFG
{ static String lexicographicSubConcat(String s)
{ int n = s.Length;
// Creating an array to store substrings
int sub_count = n*(n+1)/2;
String []arr = new String[sub_count];
// finding all substrings of string
int index = 0;
for ( int i = 0; i < n; i++)
for ( int len = 1; len <= n - i; len++)
{
arr[index++] = s.Substring(i, len);
}
// Sort all substrings in lexicographic
// order
Array.Sort(arr);
// Concatenating all substrings
String res = "" ;
for ( int i = 0; i < sub_count; i++)
res += arr[i];
return res;
} // Driver code public static void Main(String[] args)
{ String s = "abc" ;
Console.WriteLine(lexicographicSubConcat(s));
} } /* This code contributed by PrinciRaj1992 */ |
Javascript
<script> // Javascript Program to create concatenation of all // substrings in lexicographic order. function lexicographicSubConcat(s)
{ var n = s.length;
// Creating an array to store substrings
var sub_count = n*parseInt((n+1)/2);
var arr = Array(sub_count);
// finding all substrings of string
var index = 0;
for ( var i = 0; i < n; i++)
for ( var len = 1; len <= n - i; len++)
arr[index++] = s.substring(i,i+ len);
// Sort all substrings in lexicographic
// order
arr.sort();
// Concatenating all substrings
var res = "" ;
for ( var i = 0; i < sub_count; i++)
res += arr[i];
return res;
} var s = "abc" ;
document.write( lexicographicSubConcat(s)); </script> |
Output
aababcbbcc
Time Complexity: O(n3)
Auxiliary Space: O(n)