Skip to content
Related Articles

Related Articles

Lexicographical concatenation of all substrings of a string

Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 01 Aug, 2022
Improve Article
Save Article

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 

  1.  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. 
  2. Sort the string array to make them all in lexicographical order. 
  3. 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)

This article is contributed by Aarti_Rathi. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!