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);
}
}
Java实现 蓝桥杯VIP 基础练习 完美的代价
2023-09-14 08:58:17 时间
相关文章
- 被面试官吊打系列之Java基础 之 ThreadLocal 源码分析
- JAVA语言基础
- Java语法基础(四)----循环结构语句
- Java实现 基础算法 求100以内的质数
- Java实现 基础算法 百元买百鸡
- Java实现 蓝桥杯VIP基础练习 矩形面积交
- Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
- Java实现 蓝桥杯VIP 基础练习 Sine之舞
- Java实现 蓝桥杯VIP 基础练习 FJ的字符串
- Java实现 蓝桥杯VIP 基础练习 2n皇后问题
- Java实现 蓝桥杯VIP 基础练习 Huffuman树
- Java实现 蓝桥杯 基础练习 数列特征
- Java实现蓝桥杯基础练习特殊回文数
- Java实现基础练习十进制转十六进制
- 蓝桥杯(Java方法、详细解法分析)基础练习 阶乘计算
- 【JAVA】毕向东Java基础视频教程-笔记
- Atitit 搜索蓝牙设备 powershell的实现 java noede.js python 先用脚本语言python nodejs,不好实现。。Java 也不好实现。。 Netcore可以,
- Java 零基础跑起第一个程序
- 装箱和拆箱---JAVA基础篇
- Java基础_异常处理