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

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

Output:

```aababcbbcc
```

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.

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.