Skip to content
Related Articles

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.


Input: I = 2, X = 2, arr[] = { “baqwer”, “zacaeaz”, “aaqzzaa”, “aacaap”, “abbatyo”, “bbbacztr”, “bbbdaaa” }
Output: abbatyo bbbacztr bbbdaaa aacaap zacaeaz baqwer aaqzzaa
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:


// 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;
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
Recommended Articles
Page :