字符串排列
作者:
666_4
,
2024-11-08 11:18:53
,
所有人可见
,
阅读 1
//排列字符串
#include<iostream>
#include<string>
#include<vector>
using namespace std;
bool comp1(string s1,string s2)
{
if(s1.size()>s2.size()) return 1;
else if(s1.size()<s2.size()) return 0;
else {
for(int i=0;i<s1.size();i++)
{
if(s1[i]>s2[i]) return 1;
else if(s1[i]<s2[i]) return 0;
}
}
return 1;
}
bool comp2(string s1,string s2)
{
if(s1.size()>s2.size()) return 1;
else if(s1.size()<s2.size()) return 0;
else {
for(int i=0;i<s1.size();i++)
{
if(s1[i]>s2[i]) return 1;
else if(s1[i]<s2[i]) return 0;
}
}
return 0;
}
bool issym(string s1)
{
for(int i=0,j=s1.size()-1;i<j;i++,j--)
{
if(s1[i]!=s1[j]) return 0;
}
return 1;
}
void ssort(vector<string> &s1,int l,int r)
{
if(l>=r) return ;
int i=l,j=r;
string pivot=s1[i];
while(i<j)
{
while(comp1(s1[j],pivot)&&i<j) j--;
if(i<j) s1[i]=s1[j];
while(comp2(pivot,s1[i])&&i<j) i++;
if(i<j) s1[j]=s1[i];
}
s1[i]=pivot;
ssort(s1,l,i-1);
ssort(s1,i+1,r);
}
int main()
{
vector<string> s;
string s1;
getline(cin,s1);
while(s1!="0")
{
if(issym(s1)) s.push_back(s1);
getline(cin,s1);
}
ssort(s,0,s.size()-1);
for(int i=0;i<s.size();i++)
cout<<s[i]<<endl;
}