给定两个正整数I和X以及字符串数组arr [] ,任务是根据从大小X的索引I开始的怀疑对给定的字符串数组进行排序。
例子:
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
方法:这个想法是根据大小为X的索引I在给定数组中创建所有字符串的子字符串,并将子字符串对的计数与对应的字符串在成对映射中。在成对插入地图之后。插入后,遍历地图并打印字符串。
下面是上述方法的实现:
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;
}
abbatyo bbbacztr bbbdaaa aacaap zacaeaz baqwer aaqzzaa
时间复杂度: O(N * log N)
辅助空间: O(N)