Java实现 蓝桥杯VIP 基础练习 完美的代价
2023-09-14 08:58:17 时间
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 long string 转换_Java long 转成 String的实现[通俗易懂]
- java helloworld源代码_Java Hello World源代码剖析
- java数组的声明_Java数组定义常用方法[通俗易懂]
- java基础编程入门教程,2022最新
- java环境_Java基础篇——环境配置
- java技术介绍_Java技术汇总
- java notifyall_Java Thread notifyAll()方法[通俗易懂]
- Java 8 的 java.util.function.* POJO 的反射新方法
- Java事件处理基础实例:处理按钮点击+捕获窗口事件+改变观感
- java在线播放_Java实现视频在线播放flv视频
- 大数据必学Java基础(八十一):基于TCP的网络编程
- JAVA英文文献_java毕业论文参考文献
- JAVA 新提案:努力简化Hello World,让初学者更好地接受 Java !
- 深入Java:利用API快速创建MySQL表(java创建mysql表)
- Java监控MySQL性能:实现数据库运行优化(java监控mysql)
- 深入浅出Java配置MySQL数据库(java配置mysql)
- Linux下安装Java 开发环境指南(linux装java环境)
- 服务器快速搭建Linux Java服务器,实现互联网应用(linux搭建java)
- Java实现Redis数据写入(java写入redis)
- 使用Java连接MySQL实现查询功能(java连接mysql查询)
- 实现Java实现的Redis封装类:强化Redis技术支持(redis封装类java)
- 使用Java连接SQL Server数据库,轻松实现数据交互(java连sqlserver)
- 使用Java实现MySQL数据恢复操作(java恢复mysql)
- Java导入Oracle 实现快速数据传输(java导入oracle)