如题,给出若干个字符串输出字符串拼接成的最小的结果
则我们应当对其进行排序,排序的规则是,如果总共字符串为s1,s2,s3.且如果是s1+s2大于s2+s1则应该将s2排在s1的前面,来使得最终拼接成的总字符串最小。排列后为s2,s1,s3.如果s1+s3>s3+s1的话将s3排在s1的前面。然后再进行s2与s3的排序。如果s2+s3同理如果欲求得字符串排序最大的排序应当将排序顺序颠倒,如果s1+s2
最后由于数据量过大使用bubble_sort会导致时间超限,则需要使用更高效的排序,例如使用stl中的sort排序,重新编排排序规则如图
bool cmp(string s1,string s2)
{
return s1+s2<s2+s1;
}
然后sort(all.begin(),a.end(),cmp)
最后依次输出即可
#include <bits/stdc++.h>
using namespace std;
vector<string>all;
bool cmp(string s1,string s2)
{
return s1+s2<s2+s1;
}
int main()
{
// 请在此输入您的代码
int n;cin >> n;
string fm;
while (n--)
{
cin >> fm;
all.push_back(fm);
}
sort(all.begin(),all.end(),cmp);
for(auto i: all)
cout<<i;
return 0;
}
同理洛谷上的一道正序题
#include<bits/stdc++.h>
using namespace std;
vector<string>all;
bool cmp(string a,string b)
{
return a+b>b+a;
}
int main()
{
int n;
string ai;
;cin>>n;
while(n--)
{
cin>>ai;
all.push_back(ai);
}
sort(all.begin(),all.end(),cmp);
for(auto i : all)
cout<<i;
return 0;
}
标签:string,s3,s2,s1,最小,拼接,字符串,排序,cmp
From: https://blog.csdn.net/wgz0621/article/details/136989451