解题报告:
这题真不会。。看了别人的思路就是把奇偶不同的字母分为两类,然后排序,假设两个字符串是a和b ,这样我们检查a+b 是否合法,或者b+a是否合法,如果都不合法就没机会了,不难发现 a和b内部的差值都是偶数,一定是合法的,只需要check 两个字符串连接的地方是否是合法的就行了。
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const int N=1010;
const int mod=1e9+7;
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
int res;
int n,k;
ll f[210][10]; //考虑前i个 最多喝了j瓶药的最大积分
int m;
struct node{
ll a;
ll b;
ll c;
}q[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t;
cin>>t;
while(t--)
{
string s;
cin>>s;
string s1,s2;
for(int i=0;i<s.size();i++)
{
if(s[i]&1) s1+=s[i];
else s2+=s[i];
}
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
// cout<<s1<<' '<<s2<<endl;
if(abs(s2[0]-s1[s1.size()-1]) !=1){
cout<<s1+s2<<endl;
}
else if(abs(s2[s2.size()-1]-s1[0])!=1 )
cout<<s2+s1<<endl;
else
cout<<"No answer"<<endl;
}
return 0;
}