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