排列对称串

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

输入样例

123321

123454321

123

321

sdfsdfd

121212

\dd\

输出样例

123321

\dd\

123454321

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
typedef long long ll;
struct cmop
{
    bool operator()(const string &s1,const string &s2)
    {
        return (s1.length()!=s2.length()?s1.length()<s2.length():s1<s2);
    }
};
bool cmp(const string &s1,const string &s2)
{
    return (s1.length()!=s2.length()?s1.length()<s2.length():s1<s2);
}
int main()
{
    vector<string>v;
    multiset<string,cmop>s;
    string m,t;
    while(cin>>m)
    {
        t=m;
        reverse(t.begin(),t.end());
        if(t==m)
        {
            v.push_back(m);
            s.insert(m);
        }
    }
    sort(v.begin(),v.end(),cmp);
    for(int i=0;i<v.size();i++)
        cout<<v[i]<<endl;
    for(multiset<string,cmop>::iterator it=s.begin();it!=s.end();it++)
        cout<<*it<<endl;
    return 0;
}

 按1的个数排序

有一些0、1的字符串,将其按1的个数多少进行排序,个数相同按ASCII码值

输入样例

10011111

00001101

1010101

1

0

1100

输出样例

0

1

1100

00001101

1010101

10011111

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
typedef long long ll;
struct cmop
{
    bool operator()(const string &s1,const string &s2)
    {
        int c1=count(s1.begin(),s1.end(),'1');
        int c2=count(s2.begin(),s2.end(),'1');
        return c1!=c2?c1<c2:s1<s2;
    }
};
bool cmp(const string &s1,const string &s2)
{
    int c1=count(s1.begin(),s1.end(),'1');
    int c2=count(s2.begin(),s2.end(),'1');
    return c1!=c2?c1<c2:s1<s2;
}
int main()
{
    vector<string>v;
    multiset<string,cmop>s;
    string m;
    while(cin>>m)
    {
        v.push_back(m);
        s.insert(m);
    }
    sort(v.begin(),v.end(),cmp);
    for(int i=0;i<v.size();i++)
        cout<<v[i]<<endl;
    for(multiset<string,cmop>::iterator it=s.begin();it!=s.end();it++)
        cout<<*it<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7126980.html