众里寻他千百度,慕然回首,那人却在灯火阑珊处。 给你n个数字字符串 请你给出一种排列使得n个字符串连接后的字典序最大 若字典序最大的排列有多组则保留字典序小的在前面 例 2 55 5 输出 5 55
时间: 2024-02-12 11:07:11 浏览: 72
这道题目可以使用贪心算法来解决。我们可以对于所有的数字字符串按照字典序从大到小进行排序,然后将它们依次连接起来即可。
需要注意的是,如果存在多组字典序最大的排列,我们需要选择字典序小的排列。因此,在进行排序时,如果两个字符串的前缀相同,我们需要比较它们的长度。长度较长的字符串应该排在前面。
以下是参考代码实现:
```cpp
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
bool cmp(string a, string b) {
if (a + b > b + a) {
return true;
} else if (a + b < b + a) {
return false;
} else {
return a.length() > b.length();
}
}
int main() {
int n;
cin >> n;
vector<string> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
sort(nums.begin(), nums.end(), cmp);
for (int i = 0; i < n; i++) {
cout << nums[i];
}
cout << endl;
return 0;
}
```
时间复杂度:O(nlogn),其中 n 是数字字符串的个数。排序的时间复杂度为 O(nlogn),连接字符串的时间复杂度为 O(n)。
阅读全文