题意:

在原字符串中修改数量最少,然后保证最小字典序。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2e5+10;
int a[100];
char s[N];
char ans[N];
int main()
{
scanf("%s",s);
int len=strlen(s);
memset(a,0,sizeof(a));
if(len%2==0)
{
for(int i=0;i<len;i++)
{
int x=s[i]-'a';
a[x]++;
}
for(int i=0;i<26;i++)
{
if(a[i]%2)
{
for(int j=25;j>i;j--)
{
if(a[j]%2)
{
a[j]--;
a[i]++;
break;
}
}
}
}
int s=0;
int t=len-1;
for(int i=0;i<26;i++)
{
if(a[i]&&a[i]%2==0)
{
while(a[i])
{
ans[s++]=i+'a';
ans[t--]=i+'a';
a[i]-=2;
}
}
}
ans[len]='\0';
printf("%s\n",ans);
}
else
{
for(int i=0;i<len;i++)
{
int x=s[i]-'a';
a[x]++;
}
for(int i=0;i<26;i++)
{
if(a[i]%2!=0)
{
for(int j=25;j>i;j--)
{
if(a[j]&&a[j]%2!=0)
{
a[j]--;
a[i]++;
break;
}
}
}
}
int s=0;
int t=len-1;
for(int i=0;i<26;i++)
{
if(a[i]&&a[i]%2==0)
{
while(a[i]>0)
{
a[i]-=2;
ans[s++]=i+'a';
ans[t--]=i+'a';
}
}
if(a[i]&&a[i]%2!=0)
{
while(a[i]>1)
{
a[i]-=2;
ans[s++]=i+'a';
ans[t--]=i+'a';
}
ans[len/2]=i+'a';
}
}
ans[len]='\0';
printf("%s\n",ans);
}
return 0;
}

最新文章

  1. MySQL 常用函数和语句笔记
  2. js 获取样式兼容方法
  3. 使用JavaScript创建我的分页
  4. eval 如何定义函数
  5. “System.FormatException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理 其他信息: 该字符串未被识别为有效的 DateTime。
  6. Jquery结合datagrid框架
  7. 从花式swap引出的pointer aliasing问题
  8. ADO.NET调用存储过程
  9. iOS在GitHub Top 前100 简介
  10. Mac 电脑前端环境配置
  11. 模拟ES6中的Promise实现,让原理一目了然
  12. sgu438-The_Glorious_Karlutka_River
  13. IdentityServer4【QuickStart】之使用ClientCredentials流程保护API
  14. 使用 LaTeX 画图系列
  15. 深入了解HBASE架构(转)
  16. HighCharts插件学习(二)
  17. vc++使用IWinHttpRequest获取网页内容乱码
  18. RAC初步使用
  19. java-jmx使用
  20. 在selenium中使用css选择器进行元素定位

热门文章

  1. LeetCode(15)题解--3Sum
  2. cocos2d-js实现 双击android后退按钮 即退出游戏
  3. hdu1427 速算24点
  4. 20170228 交货单过账增强 MV50AFZ1
  5. git推送已有项目到gitee
  6. for(String s:list)的运行
  7. vue-面试
  8. Vue一次性简洁明了引入所有公共组件
  9. 转回java,项目遇到的环境相关问题记录
  10. Jmeter参数化_CSV Data Set Config