# Lexicographical concatenation of all substrings of a string

• Difficulty Level : Easy
• Last Updated : 01 Aug, 2022

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

 ``

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