自学内容网 自学内容网

如何处理多个字符串拼接出最大最小结果问题

如题,给出若干个字符串输出字符串拼接成的最小的结果

则我们应当对其进行排序,排序的规则是,如果总共字符串为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;
}


原文地址:https://blog.csdn.net/wgz0621/article/details/136989451

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!