分析:
首先判断字符串是否能构成回文串:
不能构成回文串的话直接输出Impossible。只要只出现奇数次的字母个数多于1个就不能构成回文串。
能构成回文串的话再用递归的方法统计需要移动的最小次数。
Java代码实现:
import java.util.Scanner;
public class Main {
//检验能否构成回文串
public static boolean IsPossible(String str) {
boolean ans = true;
int []cnt = new int[26];
int odds=0;
//用数组存储数组元素下标对应的序号字母出现的次数
for(int i = 0;i<str.length();i++) {
cnt[str.charAt(i)-'a']++;
}
//统计只出现奇数次的字母的个数
for(int i = 0;i<26;i++) {
if(cnt[i]%2==1)
odds++;
}
//如果只出现奇数次的字母多于1个,则不能构成回文串
if(odds>1) {
ans=false;
}
return ans;
}
//如果能够构成回文串,返回交换的次数
public sta