题目大意:给定一串字符串,查找字符串里字母逆序排列的对数,按照由少到多的顺序把所有字符串进行排列。
解法:用C++字符串string类的iterator,从每个字符串的起始开始,查找逆序字符的个数,然后用qsort方法按照reverseCount的大小快速排序。
参考代码:
#include<iostream> #include<string> #include<string.h> #include<cstdlib> #include<cstdio> using namespace std; struct DNAStr{ int index,reverseCount; string str; }DNA[102]; int countReverse(string s){ int num = 0; string::iterator lit = s.begin(); string::iterator rit; for(; lit < s.end(); lit++) for(rit = lit + 1; rit <s.end(); rit++) { if(*lit > *rit) { num++; } } return num; } int cmp(const void *a, const void *b){ DNAStr * x = (DNAStr *)a; DNAStr * y = (DNAStr *)b; return (DNAStr *)x->reverseCount > (DNAStr *)y->reverseCount; } int main(){ int cas,m,n; cin>>cas; while(cas--){ getchar(); cin>>n>>m; getchar(); for(int i=0;i<m;i++){ getline(cin,DNA[i].str); DNA[i].index=i; } for(int i=0;i<m;i++) DNA[i].reverseCount = countReverse(DNA[i].str); qsort(DNA,m,sizeof(DNAStr),cmp); for(int i=0;i<m;i++){ cout<<DNA[i].str<<endl; } if(cas) cout<<endl; } return 0; }