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

**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 <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to sort the given array ` `// of strings based on substring ` `void` `sortArray(vector<string> s, ` ` ` `int` `l, ` `int` `x) ` `{ ` ` ` `// Map of pairs to sort vector ` ` ` `// of strings ` ` ` `map<pair<string, string>, ` `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<string> 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; ` `} ` |

*chevron_right*

*filter_none*

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

## Recommended Posts:

- Sort elements on the basis of number of factors
- Sort on the basis of number of factors using STL
- Program to sort an array of strings using Selection Sort
- Number of ways in which the substring in range [L, R] can be formed using characters out of the range
- Check whether two strings can be made equal by reversing substring of equal length from both strings
- Find if a given string can be represented from a substring by iterating the substring ānā times
- Partition given string in such manner that i'th substring is sum of (i-1)'th and (i-2)'th substring
- Comparison among Bubble Sort, Selection Sort and Insertion Sort
- Length of the largest substring which have character with frequency greater than or equal to half of the substring
- Minimum length of substring whose rotation generates a palindromic substring
- Count of distinct characters in a substring by given range for Q queries
- Sort the array in a given index range
- Python | Finding strings with given substring in list
- Sort an array of strings based on the given order
- Longest Common Substring in an Array of Strings
- Search strings with the help of given pattern in an Array of strings
- Print all Strings from array A[] having all strings from array B[] as subsequence
- Substring Sort
- Bucket Sort To Sort an Array with Negative Numbers
- Sort an Array which contain 1 to N values in O(N) using Cycle Sort

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.