基础题,主要是理解题意:一个字符串,对于每个字符,其后小于该字符的字符数量,称为该字符的逆序数,字符串中所有字符的逆序数之和称为该字符串的逆序数。给定若干字符串,将这些字符串按照逆序数从小到大排序,如果两个字符串逆序数相同,则两者输出的先后顺序和输入时相同。
首先求出给定的所有字符串的逆序数,然后使用 <algorithm> 中的 stable_sort 函数将字符串排序即可。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int MAXM = 105;
struct DNA //DNA序列
{
string s; //字符串
int num; //逆序数
}d[MAXM];
//排序规则
bool cmp(DNA d1, DNA d2)
{
return d1.num < d2.num;
}
int main()
{
int T;
cin >> T;
while (T--)
{
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++) //输入所有字符串
{
d[i].num = 0;
cin >> d[i].s;
for (int j = 0; j < n; j++) //求出该字符串的逆序数
{
for (int k = j + 1; k < n; k++)
{
if (d[i].s[j] > d[i].s[k])
d[i].num++;
}
}
}
stable_sort(d, d + m, cmp); //稳定排序
for (int i = 0; i < m; i++) //输出
{
cout << d[i].s << endl;
}
}
return 0;
}
继续加油。
本文介绍了一种基于字符串逆序数的排序算法,通过计算每个字符串中字符的逆序数来确定其排序位置,利用稳定的排序算法实现字符串的排序,适用于需要按特定规则排序字符串的场景。
1769

被折叠的 条评论
为什么被折叠?



