这道题一定看清对于字典序的定义,由此可以推出除了 t==abc 这种情况外, 其余的情况都是直接将s排序一遍并直接输出。将s sort后,如果没有a或b或c,那么无论如何都不会使abc成为自己的子序列,故而直接输出。
如果不是abc,则排过序的最小字典序序列中(肯定是abc结构)不会存在不是abc的字串,所以直接输出。
只有排序过的序列中同时存在abc时才需要特别关照,就是把abc按照acb形式输出,保证在合理的情况下字典序最少,话不多说,上代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
void sub()
{
string s, t;
cin >> s >> t;
int A, B, C;
A = B = C = 0;
sort(s.begin(), s.end());
for(int i = 0; i < s.size(); i ++)
{
if(s[i] == 'a') A ++;
else if(s[i] == 'b') B ++;
else if(s[i] == 'c') C ++;
}
if(A && B && C && t == "abc")
{
for(int i = 0; i < A; i ++) cout << "a";
for(int i = 0; i < C; i ++) cout << "c";
for(int i = 0; i < B; i ++) cout << "b";
cout << s.substr(A + B + C) << endl;
}
else printf("%s\n", s.c_str());
}
int main()
{
int t;
cin >> t;
while(t --)
sub();
return 0;
}