Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Lexicographical concatenation of all substrings of a string

  • Difficulty Level : Easy
  • Last Updated : 28 May, 2021

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 
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

 



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.
 

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

 

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!