package 蓝桥杯VIP;

import java.util.Scanner;

public class 完美的代价 {
public static int sum = 0;
public static void exchange(char[] arr, int x, int y) { //把arr字符数组中x下标和y下标对应的值交换位置
char item;
item = arr[x];
arr[x] = arr[y];
arr[y] = item; sum ++; //移动次数加一
}
public static void main(String[] args) {
Scanner readerIn = new Scanner(System.in);
int n = readerIn.nextInt();
String str = readerIn.next();
char[] arr = str.toCharArray();
int flag = 0; //当字符串长度为奇数时非成对字符的个数
boolean isHuiwen = true; //标示此字符串是否为回文
int i, j, l = arr.length; for(i = 0; i < arr.length/2; i ++) {
for(j = l - 1; j >= i; j -- ) { //从最右边开始查找,看有无与当前字符相同的
if(0 == arr.length % 2 && i == arr.length - 1 && j == arr.length) {
//如果当前字符串长度为偶数,且中间两个字符不相同,则该字符不是回文字符
if(arr[i] != arr[j]) {
isHuiwen = false;
break;
}
}
if(i == j) { //没有找到与当前字符相同的字符
if(0 == arr.length % 2) { //如果字符长度为偶数则不是回文字符串
isHuiwen = false;
break;
} else { //如果当前字符长度为奇数,且未匹配的字符超过一个,则也不是回文字符
flag ++;
if(flag <= 1) { //有一个字符未匹配,则把此字符移动到中间
for(int m = 0; m < arr.length/2 - 1; m ++) {
exchange(arr, m, m + 1);
}
i = 0; //重新开始遍历
break;
}
if(flag == 2) { //如果有两个字符为匹配,则该字符不是回文字符
isHuiwen = false;
break;
}
}
}
if(arr[i] == arr[j]) {
for(int k = j; k <= l - 1 - 1; k ++){
exchange(arr, k, k + 1);
//System.out.println(arr);
}
l --;
break;
}
}
}
if(!isHuiwen)
System.out.println("Impossible");
else
System.out.printf("%d\n", sum);
} }

最新文章

  1. JavaScript自定义媒体播放器
  2. .Net配置中心-服务端/客户端
  3. Linux_脚本安装包(以Webmin的安装为例)
  4. jQuery Mobile页面跳转后未加载外部JS(转)
  5. Linux 串口编程(转)
  6. jqgrid 获取当前页码
  7. 2015-0306—DataLList
  8. delphi xe5 android 开发实现手机打电话和发短信
  9. 记录一下最近开发web移动前端的过程
  10. htt p第一章概述
  11. 使用CSS画图之三角形(一)
  12. C#中委托。
  13. 使用透视表pivot_table
  14. C# winform程序怎么打包成安装项目(VS2010图解)
  15. python 面向对象(二)成员
  16. 【Zookeeper】连接ZooKeeper的方式
  17. 数据库隔离级别深入理解(ORACLE)
  18. 【Linux】linux/unix下telnet提示Escape character is &#39;^]&#39;的意义
  19. myeclipse从svn导入文件报错:
  20. PowerBI开发 第六章:数据网管

热门文章

  1. 白话马尔科夫链蒙特卡罗方法(MCMC)
  2. sql server 百万级数据库优化方案
  3. [hdu4911]逆序对相关
  4. SpringBoot基础实战系列(一)整合视图
  5. CODING 敏捷实战系列课第四讲:从头搭建持续集成 DevOps 流水线
  6. 内存的堆分配和栈分配 &amp; 字符数组,字符指针,Sizeof总结
  7. Linux --登录用户显示-bash-4.2#解决办法
  8. vue项目开发中遇到的问题总结
  9. ios中fixed元素在滚动布局中的延时渲染问题
  10. 使用Redis——拳打南山敬老院,脚踩北斗幼儿园