完美的代价

xiaoxiao2021-02-28  128

题目描述

输入

输出

import java.util.*; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); while(in.hasNext()){ int n=in.nextInt(); String s=in.next(); char[] ch=s.toCharArray(); int i,j,k=0,cnt=0,single=0,end=n-1; //single用来记录只出现一次的字母个数 for ( i = 0; i <end; i++) {//从左边第一个开始,从右边扫描寻找第一个与左边相同的字母 for (j=end; j>=0; j--) { if(j==i){//说明走到了单个字母那里 single++;//记录个数 if(single>1||n%2==0){//如果字母长度为奇数并且单个字母个数多余一个或者如果字母长度为偶数但是出现了单个字母 System.out.println("Impossible"); k=1;//确定不可能回文了,设置k的值来退出外循环 break; } cnt+=n/2-i;//说明字母长度为奇数且单个字母只有一个,那么将它移到最中间 break; } else{ if(ch[j]==ch[i]){//从右边找到了,将所有字母从右往左进行移动 for (int l = j; l <end; l++) ch[l]=ch[l+1]; ch[end]=ch[i];//满足回文的字母排出去 cnt+=end-j; end--;//缩小边界 break; } } } if(k==1) break; } if(k==0) System.out.println(cnt); } } }

转载请注明原文地址: https://www.6miu.com/read-48384.html

最新回复(0)