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; } |
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.