题意:输入一个字符串,要求成为修改次数最小,修改完成后的字典序最小的回文串。
思路:首先将每个字符的个数统计出来,然后再重组。
如果字符的个数是偶数,就跳过。如果个数是奇数,就把后面的字符,变成前面的字符。如果a字符串的长度是奇数,那么中间就会剩下一个数量为奇数的字符。
最后直接输出
#include<bits/stdc++.h>
using namespace std;
int s[30];
int main()
{
string a;
cin>>a;
for(int i=0;i<a.length();i++)
{
s[a[i]-'a']++;
}
int i=0,j=25;
while(i<j)
{
while(s[i]%2==0) i++;
while(s[j]%2==0) j--;
s[i]++;
s[j]--;
}
for(int i=0;i<26;i++)
for(int j=1;j<=s[i]/2;j++)
printf("%c",'a'+i);
for(int i=0;i<26;i++)
if(s[i]&1) printf("%c",'a'+i);
for(int i=25;i>=0;i--)
for(int j=1;j<=s[i]/2;j++)
printf("%c",'a'+i);
}