博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
完美的代价(回文字符串)
阅读量:3952 次
发布时间:2019-05-24

本文共 843 字,大约阅读时间需要 2 分钟。

问题描述

  回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。

  交换的定义是:交换两个相邻的字符
  例如mamad
  第一次交换 ad : mamda
  第二次交换 md : madma
  第三次交换 ma : madam (回文!完美!)

输入格式

  第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)

  第二行是一个字符串,长度为N.只包含小写字母

输出格式

  如果可能,输出最少的交换次数。

  否则输出Impossible

样例输入

5

mamad

样例输出

3

【思路】

先统计给出的字符串中每个字符出现的个数,,如果奇数次字符的个数大于1,直接输出Impossible,,

从第一个字符开始,,从后往前找和它匹配的字符,,如果没找到,,那么这个字符移动到中间位置,;;

如果找到了,,把这个对称的字符移动到当前字符的对称位置,,每移动一次,,就加1,

最后输出cnt。。

#include 
using namespace std;int a[26];int main(){ ios::sync_with_stdio(false); int i,j,k,n,sum=0,cnt=0; string s; cin>>n>>s; int temp=n-1; for(i=0;i
1) { cout<<"Impossible"<
=i;j--) { if(j==i) cnt+=n/2-i; else if(s[i]==s[j]) { for(k=j;k

 

转载地址:http://uxyzi.baihongyu.com/

你可能感兴趣的文章
创建、重命名文件
查看>>
文件大小保护
查看>>
删除指定目录下所有文件及目录
查看>>
XDR-从文件空间解码整数
查看>>
XDR-.x文件的简单使用
查看>>
XDR-枚举的试用
查看>>
使用CppSQLite3访问SQLite数据库
查看>>
第一个boost程序---timer的使用
查看>>
使用boost asio库实现字节数可控的CS通信
查看>>
linux下串口编程
查看>>
boot asio 非阻塞同步编程---非阻塞的accept和receive。
查看>>
利用ADOX、ADO操纵MDB文件(ACCESS)
查看>>
使用ADO操作MDB,关注数据类型
查看>>
使用windows自带Zip命令压缩文件
查看>>
windows获得文件大小
查看>>
Host 'ETCV3' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
查看>>
OCILIB在VS2008中的使用
查看>>
OCILIB VC2008 效率测试
查看>>
PL/SQL设置NUMBER显示为字符串
查看>>
linux ftp 脚本 -- 使用程序执行脚本
查看>>