# Sort the Array of Strings on the basis of given substring range

Given two positive integers I and X and an array of strings arr[], the task is to sort the given array of strings on the basis of susbtrings starting from index I of size X.

Examples:

Input: I = 2, X = 2, arr[] = { “baqwer”, “zacaeaz”, “aaqzzaa”, “aacaap”, “abbatyo”, “bbbacztr”, “bbbdaaa” }
Output: abbatyo bbbacztr bbbdaaa aacaap zacaeaz baqwer aaqzzaa
Explanation:
All sub-strings starting from index I = 2 and of size x = 2 are {“qw”, “ca”, “qz”, “ca”, “ba”, “ba”, “bd”}.
Sorting them in lexicographical increasing order gives {“ba”, “ba”, “bd”, “ca”, “ca”, “qw”, “qz” }, then print the corresponding original string in this order.

Input: I = 1, X = 3, arr[] = { “submit”, “source”, “skills”, “epidemic”, “ample”, “apple” }
Output: submit epidemic skills ample apple source

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

Approach: The idea is to create a substring of all the strings in the given array from index I of size X and keep the count of pair of a substring with the corresponding string in a map of pairs. After inserting in the map of pairs. After inserting, traverse the map and print the string.

Below is the implementation of the above approach:

## CPP

 `// C++ program for the above approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to sort the given array ` `// of strings based on substring ` `void` `sortArray(vector s, ` `               ``int` `l, ``int` `x) ` `{ ` `    ``// Map of pairs to sort vector ` `    ``// of strings ` `    ``map, ``int``> mp; ` ` `  `    ``for` `(``int` `i = 0; i < s.size(); i++) { ` ` `  `        ``// Create substring from index ` `        ``// 'l' and of size 'X' ` `        ``string part = s[i].substr(l, x); ` ` `  `        ``// Insert in Map ` `        ``mp[{ part, s[i] }] += 1; ` `    ``} ` ` `  `    ``// Print the sorted vector of strings ` `    ``for` `(``auto` `it = mp.begin(); ` `         ``it != mp.end(); ++it) { ` ` `  `        ``// Traverse the number of time ` `        ``// a string is present ` `        ``for` `(``int` `j = 0; j < it->second; j++) { ` ` `  `            ``// Print the string ` `            ``cout << it->first.second << ``' '``; ` `        ``} ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``// Given array of strings ` `    ``vector arr; ` `    ``arr = { ``"baqwer"``, ``"zacaeaz"``, ``"aaqzzaa"``, ` `            ``"aacaap"``, ``"abbatyo"``, ``"bbbacztr"``, ` `            ``"bbbdaaa"` `}; ` ` `  `    ``// Given I and X ` `    ``int` `I = 2, X = 2; ` ` `  `    ``// Function Call ` `    ``sortArray(arr, I, X); ` `    ``return` `0; ` `} `

Output:

```abbatyo bbbacztr bbbdaaa aacaap zacaeaz baqwer aaqzzaa
```

Time Complexity: O(N*log N)
Auxiliary Space: O(N)

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 Check out this Author's contributed articles.

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.