给定一个大小为N的字符串数组arr[] ,任务是按字典顺序对字符串数组进行排序,如果在对任意两个字符串A和字符串B进行排序时,如果字符串A是字符串B 的前缀,则字符串B应该出现按排序顺序。
例子:
Input: arr[] = {“sun”, “moon”, “mock”}
Output:
mock
moon
sun
Explanation:
The lexicographical sorting is mock, moon, and sun.
Input: arr[] = {“geeks”, “geeksforgeeks”, “geeksforgeeks”}
Output:
geeksforgeeks
geeksfor
geeks
方法:这个想法是使用下面的比较器函数使用内置的排序函数对给定的字符串数组进行排序。比较器函数用于检查任何字符串是否作为另一个字符串的子字符串出现在 C++ 中使用 compare()函数然后,它应该按照它们的长度降序排列它们。
bool my_compare(string a, string b)
{
// If any string is a substring then
// return the size with greater length
if (a.compare(0, b.size(), b) == 0
|| b.compare(0, a.size(), a) == 0)
return a.size() & gt;
b.size();
// Else return lexicographically
// smallest string
else return a & lt;
b;
}
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to print the vector
void Print(vector v)
{
for (auto i : v)
cout << i << endl;
}
// Comparator function to sort the
// array of string wrt given conditions
bool my_compare(string a, string b)
{
// Check if a string is present as
// prefix in another string, then
// compare the size of the string
// and return the larger size
if (a.compare(0, b.size(), b) == 0
|| b.compare(0, a.size(), a) == 0)
return a.size() > b.size();
// Else return lexicographically
// smallest string
else
return a < b;
}
// Driver Code
int main()
{
// GIven vector of strings
vector v = { "batman", "bat", "apple" };
// Calling Sort STL with my_compare
// function passed as third parameter
sort(v.begin(), v.end(), my_compare);
// Function call to print the vector
Print(v);
return 0;
}
输出:
apple
batman
bat
时间复杂度: O(N*log N)
辅助空间: O(1)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live