对于输入的字符串,记录每种字符的个数,从小到大遍历每种字符的个数num[], 找到字符个数为奇数的num[i], 从大到小遍历每种字符,找到字符个数为奇数的num[j].num[i]++, num[j]--;以此类推
#include <bits/stdc++.h>
#define maxn 200005
#define MOD 1000000007
using namespace std;
typedef long long ll;
char str[maxn];
int num[maxn];
int main(){
// freopen("in.txt", "r", stdin);
scanf("%s", str);
for(int i = 0; str[i]; i++){
num[str[i]-'a']++;
}
int len = strlen(str);
int l = 0, r = 25;
while(l < r){
for(; l < r; l++){
if(num[l] % 2 == 1){
break;
}
}
for(; r > l; r--){
if(num[r] % 2 == 1){
break;
}
}
if(l != r){
num[l]++;
num[r]--;
}
}
int cnt = 0, k = -1;
for(int i = 0; i < 26; i++){
if(num[i]&1){
k = i;
num[i]--;
}
while(num[i]){
str[cnt] = i + 'a';
str[len-cnt-1] = i +'a';
cnt++;
num[i] -= 2;
}
}
if(k != -1)
str[cnt] = k + 'a';
puts(str);
return 0;
}