首页 > 其他分享 >如何处理多个字符串拼接出最大最小结果问题

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

时间:2024-03-24 19:32:53浏览次数:25  
标签:string s3 s2 s1 最小 拼接 字符串 排序 cmp

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

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

相关文章

  • 每日一练:LeeCode-38、外观数列【字符串】
    给定一个正整数n,输出外观数列的第n项。「外观数列」是一个整数序列,从数字1开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1)="1"countAndSay(n)是对countAndSay(n-1)的描述,然后转换成另一个数字字符串。......
  • 字符串中提取数字
    10.16输入一个字符串,内有数字和非数字字符,如:                 a123x45617960?302tab5876将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1]中……统计共有多少个整数,并输出这些数。#include<stdio.h>#include<s......
  • LeetCodeHot100 栈 155. 最小栈 394. 字符串解码
    155.最小栈https://leetcode.cn/problems/min-stack/description/?envType=study-plan-v2&envId=top-100-likedclassMinStack{Deque<Integer>deque;PriorityQueue<Integer>priorityQueue;publicMinStack(){de......
  • Java为什么创建一个字符串对象需要在内存中创建两份
    在Java中,当你使用Strings=newString("abc")这样的语法创建一个字符串时,实际上会在内存中创建两个对象。这是因为Java中的字符串分为两种类型:一种是使用字面量的方式创建的字符串,另一种是通过new关键字创建的字符串。当我们使用字面量方式创建字符串时,例如Strings="a......
  • 最长子字符串的长度(二)【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-最长子字符串的长度(二)给你一个字符串s,字符串s首尾相连成一个环形,请你在环中找出’l’、‘o’、‘x’字符都恰好出现了偶数次最长子字符串的长度。输入描述:输入是一串小写的字母组成的字符串。输出描述:输出是一个整数补充说明:1<=s.length<=5x10^5......
  • abc346D 生成仅一处相同01串的最小代价
    给定由0和1组成的字符串s[n],翻转第i个字符需要花费c[i],现在修改s,使得有且只有一个i满足s[i]==s[i+1],求最小花费。2<=n<=2e5;1<=c[i]<=1e9可以动态规划,记dp[i][j][k]表示前i个字符,以j结尾,存在k处相等的最小花费,对每个位置,枚举改与不改两种情况进行转移。#include<bits/stdc++.......
  • 找到字符串中所有字母异位词 - LeetCode 热题 9
    大家好!我是曾续缘......
  • lc2781 最长合法子字符串的长度
    给定长度为n且只包含小写字母的字符串word和禁用字符串数组forbidden,如果一个字符串不包含forbidden中的任何字符串,则称其为合法。求word中最长合法子字符串的长度,子字符串可以为空。1<=n<=1e5;1<=forbidden.length<=1e5;1<=forbid[i].length<=10注意到forbid[i]长度最大只有1......
  • 字符串翻转(C++)
    示例:        翻转前:tobeornottobe        翻转后:otebrotonoteb基本思路:        利用strtok字符串切割函数拿到每一部分,存储到一个字符串数组中,再将每一个字符串数组倒置。最后顺序输出。程序代码:#include<iostrem>#include<string>#......
  • lc2953 统计完全子字符串的数目
    给定只包含小写字母的字符串word和整数k,如果s的某个子串中每个字符恰好出现k次,并且相邻字母最多相差2,则称其为完全字符串。求word中完全字符串的数目。1<=word.length<=1e5;1<=k<=word.length预处理出每个字母出现次数的前缀和,这样可以O(1)得到区间[l,r]内某个字母的出现次数。......