Lexicographical concatenation of all substrings of a string

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.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 */

chevron_right


Output:

aababcbbcc


My Personal Notes arrow_drop_up

Maths is the language of nature

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.