Related Articles
Sort the Array of Strings on the basis of given substring range
• Last Updated : 01 Aug, 2020

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