51nod-字符串连接

输入n个字符串s[i],你要把他们按某个顺序连接起来,使得字典序最小。

(1 <= n <= 100)

(每个字符串长度 <= 100)

(字符串只包含小写字母)

Input

第一行一个整数n。
接下来每行一个字符串s[i]。

Output

一行一个字符串表示把输入的n个字符串按某个顺序连接之后的结果

Input示例

6
it
looks
like
an
easy
problem

Output示例

aneasyitlikelooksproblem

思路:用sort自定义cmp函数比较字符串字典序大小,排序后输出即可,但是有坑,我就栽了进去,QAQ

• 最容易想到的是按字典序排序。

• ⼀个反例是ba b,答案是bab⽽不是bba。

• 空字符最⼤还是最⼩?(字典中是最⼩)

• 如果认为是最⼤的话,反例是bc b,答案是bbc

• 对于任意2个字符串,如果交换后更优,就交换。

• 类似冒泡排序,相当于按照a + b < b + a排序。

#include <iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
bool cmp(string a,string b)
{
    return a+b<b+a;
}
int main()
{
    int n;
    cin>>n;
    getchar();
    string *s=new string[n];
    for(int i=0;i<n;++i)
    {
        getline(cin,s[i]);
    }
    sort(s,s+n,cmp);
    for(int i=0;i<n;++i)
        cout<<s[i];
    cout<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/aerer/p/9931039.html