zjut_1208 排列对称串

来源:互联网 发布:2016年双十一销售数据 编辑:程序博客网 时间:2024/05/16 14:05
Description:

很多字串,有些是对称的,有些是不对称的,请将那些对称的字串按从小到大的顺序输出。字串先以长度论大小,如果长度相同,再以ASCII码值为大小标准。


Input:

输入数据中含有一些字串(1≤串长≤256)。


Output:

根据每个字串,输出对称的那些串,并且要求按从小到大的顺序输出。


Sample Input:

123321
123454321
123
321
sdfsdfd
121212

\\dd\\


Sample Output:

123321
\\dd\\

123454321


题解:

       判断字符串是否对称,这里可以用一种巧妙的办法,就是把字符串倒置,看是否跟原来相同。这要用到<algorithm>里面的reverse函数。

      把对称的字符串装到vector里面后,就要对它们进行排序了,可以使用sort函数,时间复杂度为 n*log2(n) 。

      之前我们用的sort函数只有两个参数,即sort(v.begin(),v.end());这个只能用来给整数排序;

      现在要给string排序,要使用含有三个参数的sort函数,即sort(v.begin(),v.end(),Comp);其中Comp是自定义的排序函数。


代码:

#include <iostream>#include <string>#include <algorithm>#include <vector>using namespace std;bool Comp(const string &s1, const string &s2){    return s1.length()!=s2.length()?s1.length()<s2.length():s1<s2;}int main(){    vector<string>v;    string t,s;    while(cin>>s)    {        t=s;        reverse(t.begin(),t.end());        if(t==s)        {            v.push_back(s);        }    }    sort(v.begin(),v.end(),Comp);    for(int i=0;i<v.size();i++)    {        cout<<v[i]<<endl;    }    return 0;}


0 0
原创粉丝点击