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

文章讲述了如何在C++中处理大量字符串,通过定义自定义比较函数实现排序,以最小化字符串拼接后的结果。首先介绍了基于BubbleSort的思路,然后提到使用STL中的sort函数并调整排序规则。提供了两个示例,一个是按照拼接结果从小到大排序,另一个则是从大到小排序。
摘要由CSDN通过智能技术生成

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

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

  • 15
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值